다음은 훈련과 검증 데이터셋을 이용한 모델 학습 결과입니다.
epoch: 0 loss: 0.011 accuracy: 0.498 valid_loss: 0.011 valid_accuracy: 0.508 epoch: 1 loss: 0.011 accuracy: 0.502 valid_loss: 0.011 valid_accuracy: 0.496 epoch: 2 loss: 0.011 accuracy: 0.514 valid_loss: 0.011 valid_accuracy: 0.497 epoch: 3 loss: 0.011 accuracy: 0.515 valid_loss: 0.011 valid_accuracy: 0.495 epoch: 4 loss: 0.011 accuracy: 0.524 valid_loss: 0.011 valid_accuracy: 0.515 3079.2938101291656
에포크를 5로 지정했기 때문에 정확도가 낮지만 학습과 검증 데이터셋에 대한 오차가 유사하므로 과적합은 발생하지 않고 있습니다.
실제로 테스트 데이터셋에 대해서는 어떤 결과가 나타날지 알아보겠습니다. 함수의 내용은 앞에서 살펴보았던 코드와 크게 다르지 않습니다.
코드 7-17 모델 예측 함수 정의
def evaluate(epoch, model, testloader):
test_correct = 0
test_total = 0
test_running_loss = 0
model.eval()
with torch.no_grad():
for b in testloader:
x, y = b.text, b.label
x, y = x.to(device), y.to(device)
y_pred = model(x)
loss = loss_fn(y_pred, y)
y_pred = torch.argmax(y_pred, dim=1)
test_correct += (y_pred == y).sum().item()
test_total += y.size(0)
test_running_loss += loss.item()
epoch_test_loss = test_running_loss / len(testloader.dataset)
epoch_test_acc = test_correct / test_total
print('epoch: ', epoch,
'test_loss: ', round(epoch_test_loss, 3),
'test_accuracy:', round(epoch_test_acc, 3)
)
return epoch_test_loss, epoch_test_acc