3 minute read

Pytorch

딥러닝 프레임워크

현존하는 딥러닝 프레임 워크는 우리가 생각하는 것보다 많다. 하지만 현재 최상위권의 두가지가 있는데 PyTorch 와 TensorFlow 이다.

PyTorch vs TensorFlow

두가지 프레임워크를 비교하기 전에 Define by Run 와 Define and Run 을 알아보자.

Define and Run vs Define by Run

  • Define and Run
    • 그래프를 먼저 정의하고 실행시점에 데이터를 feed 하는 형태이다
    • static 하게 실행되며 그래프를 먼저 정의 한 후 실행된다.
  • Define by Run(Dynamic Computational Graph, DCG)
    • 실행을 하면서 그래프를 생성하는 방식이다.
    • 위의 말처럼 실행중 계산을 하며 그래프를 생성한다.

TensorFlow도 Pytorch를 따라잡으려고 DCG를 구현하려고 하지만, 이미 Pytorch가 앞서 나간것으로 보인다.

Define by Run, Pytorch 장점

우리는 PyTorch를 사용할 것이기 때문에 DCG의 장점을 알아보자.

  • 즉시 그래프로 확인이 가능 하므로 조금더 pythonic code에 가깝다.
  • GPU 지원과 API 커뮤니티가 잘 형성 되어 있다.

Numpy + AutoGrad + function

  • PyTorch는 위의 세가지로 이루어 지며
  • Numpy 구조를 가지는 Tensor 객체로 array를 표현한다.
  • 자동 미분을 통해 DL 연산을 지원하고
  • 다양한 형태의 DL을 지원하는 함수와 모델을 지원한다.

Tensor 란

  • 다차원 Array를 표현하는 PyTorch의 클래스
  • numpy의 ndarray와 동일하다.(data type도 동일.)
  • Tensor를 생성하는 함수도 동일하다(numpy)
  • numpy 연산이 대부분 가능하다.
x_data.device

if torch.cuda.is_available():
    x_data_cuda = x_data.to('cuda')
x_data_cuda.device

위 코드 처럼 tensor는 GPU에 올려서 사용이 가능하다.

Tensor Handling

view, squeeze, unsqueeze 등으로 tensor의 형태를 변형가능하다.

  • view - reshape와 동일하게 tensor의 shape을 변환한다.
  • squeeze - 차원의 개수가 1인 차원을 삭제(압축)한다.
  • unsqueeze - 차원의 개수가 1인 차원을 추가한다.
# shallow copy
a = torch.zeros(3, 2)
b = a.view(2, 3)
a.fill_(1)
# deep copy
a = torch.zeros(3, 2)
b = a.t().reshape(6)
a.fill_(1)

reshape와 view의 차이는 deep copy와 , shallow copy차이와 같으며, reshape는 deep copy의 성질과 view는 shallow copy의 성질을 가진다.

Tensor operations

  • 행렬끼리의 곱셈은 dot이 아닌 mm을 사용한다.
  • nn.functional 모듈을 통해 다양한 수식 변환을 지원.

AutoGrad

  • Pytorch의 핵심은 자동 미분을 지원하는데 backward() 를 통해 사용가능하다.

PyTorch 프로젝트 구조

현재 초보 단계라 머신러닝 코드는 jupyter 나 colab환경에서 실행 시키지만 프로젝트를 진행하거나 큰 구조를 가진 코드를 구현하게 된다면 OOP와 모듈을 사용해 개발해 임해야 할 것이다.

  • 학습과정과 디버깅등 지속적인 확인이 가능
  • 배포와 공유 단계에서 쉬운 재현이 어렵고, 실행순서가 꼬이게 될 수 있다.
  • 하나의 프로그램으로써 재사용과 확장 유지보수의 향상이 필요하다.

Comments