③ 임베딩 처리를 위한 구문입니다.
ⓐ 첫 번째 파라미터: 임베딩을 할 단어 수(단어 집합의 크기)
ⓑ embeding_dim: 임베딩할 벡터의 차원
이제 옵티마이저와 손실 함수를 정의합니다.
코드 7-14 옵티마이저와 손실 함수 정의
model = Net() ------ model이라는 이름으로 모델을 객체화
model.to(device)
loss_fn = nn.CrossEntropyLoss() ------ ①
optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)
① torch.nn.CrossEntropyLoss는 다중 분류에 사용됩니다. torch.nn.CrossEntropyLoss는 nn.LogSoftmax와 nn.NLLLoss 연산의 조합으로 구성됩니다. nn.LogSoftmax는 모델 네트워크의 마지막 계층에서 얻은 결괏값들을 확률로 해석하기 위해 소프트맥스 함수의 결과에 로그(log)를 취한 것이고, nn.NLLLoss는 다중 분류에 사용합니다. 신경망에서 로그 확률 값을 얻으려면 마지막에 LogSoftmax를 추가해야 합니다.
이제 모델 학습을 위한 함수를 생성합니다. 모델 학습을 위한 함수는 공식과도 같습니다. 데이터로더에서 데이터를 가져와서 모델에 적용한 후 손실 함수를 적용하여 오차를 구하고 옵티마이저를 이용하여 파라미터(가중치, 바이어스 등)를 업데이트합니다.