① 오차와 입력을 곱하는 이유를 알아보기 위해 손실 함수의 reduction이라는 파라미터를 이해할 필요가 있습니다.
예를 들어 코드 6-14에서 손실 함수를 정의할 때 다음과 같이 지정할 수 있습니다. reduction을 따로 명시하지 않았던 이유는 기본값을 그대로 사용하기 때문입니다.
criterion = nn.CrossEntropyLoss(reduction='mean')
reduction 파라미터의 기본값은 'mean'입니다. 'mean'은 정답과 예측 값의 오차를 구한 후 그 값들의 평균을 반환합니다. 즉, 손실 함수 특성상 전체 오차를 배치 크기로 나눔으로써 평균을 반환하기 때문에 epoch_loss를 계산하는 동안 loss.item()과 inputs.size(0)을 곱해 줍니다.
이제 모델을 학습시키기 위해 train_model을 호출합니다.
코드 6-17 모델 학습
import time
num_epoch = 10
model = train_model(model, dataloader_dict, criterion, optimizer, num_epoch)