Pytorch
패키지 기본 구성(출처: https://wikidocs.net/57168)
torch: main namespace. tensor등의 함수 포함. numpy와 유사한 구조
torch.autograd: 자동 미분을 위한 함수. on/off 제어는 enable_grad/no_grad나 자체 미분가능 함수 정의 시 사용하는 기반 클래스인 Function 등을 포함.
torch.nn: neural network 구축 위한 다양한 데이터 구조나 레이어 정의돼 있음. RNN, LSTM, ReLU, MSELoss 등
torch.optim: stochastic gradient descent 를 중심으로 한 파라미터 최적화 알고리즘 구현되어 있음
torch.utils.data: sgd 반복 연산 시 미니배치용 유틸리티 함수 포함
torch.onnx: 서로 다른 딥러닝 프레임워크 간 모델 공유 시 사용
2D tensor: batch size x dimension (DS 분야)
3D tensor: batch size x width x height (vision 분야), batch size x length x dim(NLP 분야. length: 문장길이, dim: 단어벡터의 차원)
4개 문장으로 된 전체 훈련 데이터: 아직 컴퓨터는 모름.
[[나는 사과를 좋아해], [나는 바나나를 좋아해], [나는 사과를 싫어해], [나는 바나나를 싫어해]]
단어별로 나누기: 4 x 3 의 2D 텐서. 각 단어를 텍스트->벡터로 처리하여 컴퓨터가 더 잘 처리할 수 있도록 하자.
[['나는', '사과를', '좋아해'], ['나는', '바나나를', '좋아해'], ['나는', '사과를', '싫어해'], ['나는', '바나나를', '싫어해']]
벡터로 변환
'나는' = [0.1, 0.2, 0.9]
'사과를' = [0.3, 0.5, 0.1]
'바나나를' = [0.3, 0.5, 0.2]
'좋아해' = [0.7, 0.6, 0.5]
'싫어해' = [0.5, 0.6, 0.7]
훈련데이터 재구성
[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.7, 0.6, 0.5]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.7, 0.6, 0.5]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.5, 0.6, 0.7]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.5, 0.6, 0.7]]]
batch size = 2 로 설정하면 2개씩 잘림. 한 배치의 tensor의 크기는 (2x3x3)이 됨.
첫번째 배치 #1
[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.7, 0.6, 0.5]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.7, 0.6, 0.5]]]
두번째 배치 #2
[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.5, 0.6, 0.7]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.5, 0.6, 0.7]]]
print(t.dim()) # rank. 즉, 차원
print(t.shape) # shape
print(t.size()) # shape
#shape, size(), view(), sqeeze(), unsqeeze(), cat(), stack() 기능 알아놓기