PyTorch


PyTorch, Tensorflow, Tensor, view and reshape

목록

1. PyTorch vs Tensorflow

PyTorch

  • Define by Run: 실행을 하면서 그래프를 생성하는 방식
    • 즉시 확인가능하며, pythonic code
  • GPU support, Good API and community
  • 사용하기 편한 장점
  • 자동미분을 지원하여 DL 연산을 지원
  • 다양한 형태의 DL을 지원하는 함수와 모델을 지원함.

Tensorflow

  • Define and Run: 실행시점에 데이터 feed
  • production과 scalability의 장점

2. Tensor

Tensor란?

  • 다차원 Arrays를 표현하는 PyTorch 클래스
  • 사실상 numpy의 ndarray와 동일. (Tensorflow의 Tensor와 동일)
  • Tensor를 생성하는 함수 역시 거의 동일하다.
  • 기본적으로 tensor가 가질 수 있는 data 타입은 numpy와 동일하다.
  • PyTorch의 tensor는 GPU에 올려서 사용가능

Tensor handling

  • view, squeeze, unsqueeze 등으로 tensor 조정가능
  • view: reshape과 동일하게 tensor의 shape을 변환
  • squeeze: 차원의 개수가 1인 차원을 삭제 (압축)
  • unsqueeze: 차원의 개수가 1인 차원을 추가
  • view vs reshape : contiguity 보장의 차이
  • 행렬곱셈 연산의 경우 mm을 활용 (tensor에서는 dot을 활용하지 않는다.)
  • mm과 matmul은 broadcasting 지원 차이
    • matmul을 활용할 경우, 차원을 잘못맞추면 예상과 다른 결과가 나올 수 있다!!
    • error가 발생하지 않아서 debugging에 어려움이 있을 수 있다.
  • nn.functional 모듈을 통해 다양한 수식 변환을 지원한다.
  • backward 함수를 통한 자동 미분을 지원한다.

code

# tensor 생성
import torch
n_array = np.arange(10).reshape(2, 5)
t_array = torch.FloatTensor(n_array)
print(t_array.ndim, t_array.shape)
# list to tensor / numpy to tensor
data = [[3, 5], [10, 5]]
x_data = torch.tensor(data)

nd_array = np.array(data)
tensor_array = torch.from_numpy(nd_array)

추가공부

view vs reshape

  • view와 reshape의 차이는 contiguity 차이이다.
  • Contiguous: Torch Array의 값이 연속적인 메모리 위치를 가지는 상태
  • view: contiguous tensor에서만 작동함. -> contiguous tensor를 반환
  • reshape: contiguous tensor에서는 view와 동일하게 작동. non-contiguous tensor에서는 data를 copy한다.
  • 아래 코드를 실행
a = torch.zeros(3, 2)
b = a.t().reshape(6)
a.fill_(1)

print(a)
tensor([[1., 1.],
        [1., 1.],
        [1., 1.]])
print(b)
tensor([0., 0., 0., 0., 0., 0.])
a = torch.zeros(3, 2)
b = a.view(6)
a.fill_(1)

print(a)
tensor([[1., 1.],
        [1., 1.],
        [1., 1.]])
print(b)
tensor([1., 1., 1., 1., 1., 1.])





© 2019.04. by theorydb

Powered by jjonhwa