PyTorch
목표
PyTorch에서 데이터들의 연산을 위한 Tensor 사용법 및 자동 미분 기능인 AutoGrad에 대해 학습합시다. Tensor를 학습하여 추후 Custom Network를 작성할 수 있는 기본 지식을 익히고, AutoGrad의 작동 원리를 배워 backward 함수가 학습 시 어떻게 내부적으로 동작되는지 확인합시다.
numpy + AutoGrad
Tensor
- 다차원 Arrays를 표현하는 PyTorch 클래스
- 사실상 numpy의 ndarray와 동일하다. (numpy: ndarray = PyTorch: Tensor = TensorFlow: Tensor)
- Tensor를 생성하는 함수도 거의 동일하다.
- Tensor 생성은 list나 ndarray를 사용 가능하다.
- 기본적으로 tensor가 가질 수 있는 data 타입은 numpy와 동일하다.
- 기본적으로 numpy 사용법이 pytorch에 대부분 적용된다. (ex: flatten, ones_like, ...)
- PyTorch의 tensor는 GPU에 올려서 사용가능하다.
Tensor handling
view, squeeze, unsqueeze 등으로 tensor 조정가능
- view: reshape과 동일하게 tensor의 shape을 변환
- view와 reshape는 contiguity 보장의 차이
- view는 항상 보장, reshape는 그렇지 않다.
- reshape의 보장이 깨지는 순간 copy를 해준다.
- squeeze: 차원의 개수가 1인 차원을 삭제 (압축)
- unsqueeze: 차원의 개수가 1인 차원을 추가
Tensor Operations
- 기본적인 tensor의 operations(연산)는 numpy와 동일
- 행렬곱셈 연산은 함수 dot이 아닌 mm사용
- 스칼라나 벡터는 dot을 쓰고 행렬은 mm, matmul을 사용하는 것을 권장한다.
- mm은 broadcasting이 지원이 되지 않고 matmul은 broadcasting을 지원한다.
- nn.functional 모듈을 통해 다양한 수식 변환을 지원함
- AutoGrad : PyTorch의 핵심은 자동 미분의 지원 -> backward 함수 사용