[Boostcamp AI Tech] PyTorch Pytorch Basics

Tensor

  • 다차원 Arrays 를 표현하는 PyTorch 클래스
  • numpy-ndarray = TensorFlow의 Tensor = Pytorch의 Tensor
import torch
t_array = torch.FloatTensor(n_array)
print(t_array)
print("ndim :", t_array.ndim, "shape :", t_array.shape)
  • 또한 tensor가 가질수 있는 data 타입은 numpy와 동일하다
data = [[3, 5, 20],[10, 5, 50], [1, 5, 10]]
x_data = torch.tensor(data)

x_data[1:]
# tensor([[10, 5, 50],
# [ 1, 5, 10]])

x_data[:2, 1:]
# tensor([[ 5, 20],
# [ 5, 50]])

x_data.flatten()
# tensor([ 3, 5, 20, 10, 5, 50, 1, 5, 10])

torch.ones_like(x_data)
# tensor([[1, 1, 1],
# [1, 1, 1],
# [1, 1, 1]])

x_data.numpy()
# array([[ 3, 5, 20],
# [10, 5, 50],
# [ 1, 5, 10]], dtype=int64)

x_data.shape
# torch.Size([3, 3])

x_data.dtype
# torch.int64
  • pytorch의 tensor는 GPU에 올려서 사용가능하다
x_data.device
# device(type='cpu')
if torch.cuda.is_available(): #가능하면 cuda(gpu)에 올려서 실행
x_data_cuda = x_data.to('cuda')
x_data_cuda.device
# device(type='cuda', index=0)

추가로 view, squeeze, unsqueeze 등으로 tensor 조정이 가능하다.

  • view: reshape과 동일하게 tensor의 shape을 변환(view와 reshape은 contiguity 보장의 차이, 웬만하면 view사용을 추천)
  • squeeze: 차원의 개수가 1인 차원을 삭제 (압축)
  • unsqueeze: 차원의 개수가 1인 차원을 추가
tensor_ex = torch.rand(size=(2, 1, 2))
tensor_ex.squeeze()
# tensor([[0.8510, 0.8263],
# [0.7602, 0.1309]])

tensor_ex = torch.rand(size=(2, 2))
tensor_ex.unsqueeze(0).shape
# torch.Size([1, 2, 2])
tensor_ex.unsqueeze(1).shape
# torch.Size([2, 1, 2])
tensor_ex.unsqueeze(2).shape
# torch.Size([2, 2, 1]) https://bit

행렬곱은 어떻게?(mm vs matmul vs dot)

  • 행렬곱셈 연산은 함수는 dot이 아닌 mm 사용
  • mm은 벡터간 연산을 지원해주지 않는다.
  • 벡터간 곱셈은 dot 사용
  • matmul은 브로드 캐스팅을 지원해주고 dot은 지원하지 않는다.


AutoGrad(자동미분)

PyTorch의 핵심은 자동 미분의 지원 → backward 함수 사용

좋은 웹페이지 즐겨찾기