본문 바로가기

부스트캠프 AI Tech/[Week3] Pytorch

[Week3] PyTorch Basics [Day1]

*PyTorch의 특징 (tensorflow와 다른점)

  • Computational Graph
    • 연산의 과정을 그래프로 표현
    • Define and Run : 그래프를 먼저 정의 -> 실행시점에 데이터 feed
    • Define by Run (Dynamic Computational Graph) : 실행을 하면서 그래프를 생성하는 방식

 

 

*Why PyTorch

  • Define by Run의 장점 : 즉시 확인 가능 -> pythonic code
  • GPU support, Good API and community
  • 사용하기 편한 장점이 가장 큼
  • TF는 production과 scalability의 장점
  • Numpy + AutoGrad + Function
    • Numpy 구조를 가지는 Tensor 객체로 array 표현
    • 자동미분을 지원하여 DL연산을 지원
    • 다양한 형태의 DL을 지원하는 함수와 모델을 지원함

 

*Tensor

  • 다차원 Arrays 를 표현하는 PyTorch 클래스
  • 사실상 numpy의 ndarray와 동일 (TensorFlow의 Tensor와도 동일)
  • Tensor를 생성하는 함수도 거의 동일
  • Tensor 생성은 list나 ndarray를 사용 가능

 

*Numpy like operations

  • 기본적으로 pytorch의 대부분의 사용법이 그대로 적용됨


  • pytorch의 tensor는 GPU에 올려서 사용가능


  • Tensor handling - view, squeeze, unsqueeze 등으로 tensor 조정가능 
    • view : reshape과 동일하게 tensor의 shape을 변환
      view, reshape은 contiguity 보장 차이
    • squeeze : 차원의 개수가 1인 차원을 삭제 (압축)
    • unsqueeze : 차원의 개수가 1인 차원을 추가 

 

*Tensor operations

  • 기본적인 tensor의 operations는 numpy와 동일


  • 행렬곱셈 연산은 함수는 dot이 아닌 mm 사용


  • mm과 matmul은 broadcasting 지원 차이 (mm: x , matmul : o)
    • matmul :  a의 1차원은 batch를 의미하고 a : 2 x 3 와 b : 3 x 1 broadcasting이 일어나 결과는 5 x 2 x 1이 됨
      broadcasting


  • nn.functional 모듈을 통해 다양한 수식 변환을 지원


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


 

 

*PyTorch 프로젝트 구조 이해하기

 

  • 코드도 레고블럭 처럼 : OOP + 모듈 -> 프로젝트
    • 다양한 프로젝트 템플릿이 존재
    • 사용자 필요에 따라 수정하여 사용
    • 실행, 데이터, 모델, 설정, 로깅, 지표, 유틸리티 등 다양한 모듈들을 분리하여 프로젝트 템플릿화
  • Module 구성
  • 이 프로젝트 구조를 많이 쓴다