본문 바로가기

프로그래머/Pytorch

[Pytorch tutorial] PyTorch가 무엇인가요?

본 포스팅은 파이토치 튜토리얼 한글판 홈페이지 바탕으로 작성하였습니다.
pytorch tutorial - pytorch가 무엇인가요?

PyTorch가 무엇인가요?

  • 파이썬 기반의 과학연산 패키지
    • Numpy를 대체하면서 GPU를 이용한 연산이 필요한 경우
    • 최대한의 유연성과 속도를 제공하는 딥러닝 연구 플랫폼이 필요한 경우

Tensors

초기화 되지 않은 행렬 생성

x = torch.empty(5, 3)

무작위로 초기화된 행렬을 생성

x = torch.rand(5, 3)

Returns a tensor filled with random numbers from a uniform distribution on the interval [0,1)
0 이상 1 미만의 수로 균등하게 초기화

dtype이 long이고 0으로 채워진 행렬을 생성

x = torch.zeros(5, 3, dtype=torch.long)

데이터로부터 tensor를 생성

x = torch.tensor([5.5, 3])

존재하는 tensor를 바탕으로 tensor 생성

# 5x3 크기의 1로 초기화된 tensor
x = x.new_ones(5, 3, dtype=torch.double)

# dtpye를 override
# 결과는 동일한 크기
x = torch.randn_like(x, dtype=torch.float)

tensor의 크기(shape)

print(x.size())

torch.Size([5, 3])

덧셈

# 1
y = torch.rand(5, 3)
print(x + y)

# 2
print(torch.add(x, y))

# 결과 tensor를 인자로 제공
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)

# in-place 방식
y.add_(x)
print(y)

in-place(바꿔치기) 방식으로 tensor 값을 변경하는 연산은 를 접미사로 가짐
ex) x.copy
(y), x.t_()

tensor의 크기, 모양 변경

x = torch.randn(4, 4)
y = x.view(16)
# -1은 다른 차원들을 사용하여 유추(자동 계산)
z = x.view(-1, 8)  

print(x.size(), y.size(), z.size())

torch.Size([4, 4])
torch.Size([16])
torch.Size([2, 8])

tensor의 값이 하나일 때, 숫자 값 추출

x = torch.randn(1)
print(x)
print(x.item())

tensor([0.8994])
0.8994463682174683

tensor->numpy 변환

a = torch.ones(5)
b = a.numpy()

numpy->tensor 변환

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)

CUDA Tensors

tensor을 특정 장치(GPU)로 옮김

if torch.cuda.is_available():
    device = torch.device("cuda")          
    # GPU 상에 직접적으로 tensor를 생성
    y = torch.ones_like(x, device=device)  
    # `.to("cuda")`  사용
    x = x.to(device)                       
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       

tensor([1.8994], device='cuda:0')
tensor([1.8994], dtype=torch.float64)