네이버 부스트캠프 AI Tech/Deep Learning Basics

[부스트캠프 AI Tech] PyTorch Basics

중앙백 2022. 2. 2. 20:53

* CUDA(Compute Unified Device Architecture) : 소프트웨어가 특정 GPU를 사용할 수 있도록 해주는 parallel computing platform & API

 

  • 대표적인 딥러닝 프레임워크
  1. TensorFlow : Static graphs. Define and Run(그래프를 먼저 정의하고 실행시점에 데이터 feed). production & scalability의 장점
  2. PyTorch : Dynamic computation graphs. Define by Run(실행을 하면서 그래프를 생성하는 방식 -> 즉시 확인 가능하다는 장점). GPU support, Good API and community

 

 

  • PyTorch : Numpy + AutoGrad + DL Function
  1. Numpy구조를 가지는 Tensor 객체로 array 표현
  2. 자동 미분을 지원
  3. 다양한 형태의 DL 함수와 모델을 지원

 

 

PyTorch Basics
  • PyTorch = Numpy + AutoGrad  → tensor의 operations는 numpy와 유사. 단 matrix 곱셈 연산은 mm사용.
  • Tensor : 다차원 Array를 표현하는 PyTorch 클래스. numpy의 ndarray와 거의 동일.
  • PyTorch의 tensor는 GPU에 올려서 사용 가능.(cuda)

 

  • view, squeeze, unsqueeze 등으로 tensor 조작가능
    view : reshape과 동일하게 tensor의 shape 변환
    * reshape 함수도 존재는 함. 다만 view는 메모리 주소를 따오는 방식이고 reshape은 메모리 구조를 보장할 수 없게 되면 값을 copy해버리는, 방식의 차이. view를 쓰자.
    squeeze : 차원의 개수가 1인 차원을 삭제(압축)
    unsqueeze : 차원의 개수가 1인 차원을 추가

 

  • AutoGrad : 자동 미분의 지원. backward 함수 사용.

 

 

PyTorch 활용
  • PyTorch Document 참조.
  • torch.tensor(함수): 데이터를 카피해 사용
    torch.Tensor(클래스): list, numpy데이터는 카피해 사용, torch데이터는 메모리 공간을 그대로 사용.

 

  • torch.gather : out[i][j][k] = input(index[i][j][k])[j][k] (dim = 0 일 경우)
    input의 [j][k] matrix에서 0차원의 index를 내가 (index[i][j][k]에 의해) 선택할 수 있다.

 

  • torch.einsum : Einstein summation convention.

 

  • torch.linalg : 선형대수학 관련 함수.

 

torch.nn
  • nn.Linear : 자동으로 선형변환을 해줌.
  • nn.Module : 여러 기능들을 모아놓는 상자 역할을 하는 클래스.
     - Container : 모듈을 묶어서 보관하는 기능. Sequential, ModuleList, ModuleDict 등
     - parameter : weight, bias 등 parameter들을 보관하는 tensor. gradient값을 업데이트하고 모델을 저장할 때 값도 저장.
     - buffer : gradient를 계산하지 않아 값도 업데이트되지는 않지만, 모델을 저장할 때 값을 저장하고 싶을 때 이용.
     cf) tensor : gradient 계산 no. 값 업데이트 no. 모델 저장시 값 저장 no.
     - hook : 자신의 custom 코드를 package 중간에 실행할 수 있도록 만들어놓은 인터페이스.
        → Tensor : backward hook만 존재. register_hook 후에 _backward_hooks.
        → Module : register_forward_pre_hook / register_forward_hook / register_full_backward_hook
     - apply : 모델에 속하는 모든 module에 일괄적으로 함수를 적용

 

 

PyTorch Dataset
  • Dataset class : 데이터 입력 형태를 정의하는 클래스. Image, Text, Audio 등에 따라 다른 입력 정의.
     - 유의할 점 : 데이터 형태에 따라 각 함수를 다르게 정의함. 모든 것을 데이터 생성 시점에 처리할 필요는 없음.
  • DataLoader class : 데이터의 Batch를 생성해주는 클래스. 학습 직전(GPU feed전) 데이터의 변환을 책임
       Tensor로 변환 + Batch 처리가 메인 업무.