더북(TheBook)

실제로 훈련 데이터셋에 대한 오차는 훈련이 진행될수록 감소하고 있으나 검증 데이터셋은 2000번째 갑자기 상승한 이후 낮아졌다 높아지는 것이 반복되고 있습니다. 즉, 훈련 데이터에 대해서는 학습이 잘되었지만 검증 데이터셋에 대해서는 모델의 정확도가 많이 떨어지는 것을 확인할 수 있습니다.

모델 평가를 위해 테스트 데이터셋을 이용합니다. 모델이 예측한 결과를 실제 레이블(정답)과 비교하여 모델 평가를 진행합니다. 평가 결과는 정확도, 정밀도, 재현율, F1-스코어로 표현되는 혼동 행렬을 이용합니다. 또한, 혼동 행렬 결과를 이해하기 쉽도록 히트맵(heatmap)으로 표현해 보겠습니다.

코드 10-50 모델 평가 함수 정의

def evaluate(model, test_loader):
    y_pred = []
    y_true = []

    model.eval() ------ 테스트 데이터셋으로 모델 평가
    with torch.no_grad():
        for text, label in test_loader:
            encoded_list = [tokenizer.encode(t, add_special_tokens=True) for t in text]
            padded_list = [e + [0] * (512-len(e)) for e in encoded_list]
            sample = torch.tensor(padded_list)
            sample, label = sample.to(device), label.to(device)
            labels = torch.tensor(label)
            output = model(sample, labels=labels)
            _, output = output
            y_pred.extend(torch.argmax(output, 1).tolist())
            y_true.extend(labels.tolist())

    print('Classification 결과:')
    print(classification_report(y_true, y_pred, labels=[1,0], digits=4))

    cm = confusion_matrix(y_true, y_pred, labels=[1,0]) ------ ①
    ax = plt.subplot()
    sns.heatmap(cm, annot=True, ax=ax, cmap='Blues', fmt="d") ------ ②
    ax.set_title('Confusion Matrix')
    ax.set_xlabel('Predicted Labels')
    ax.set_ylabel('True Labels')
    ax.xaxis.set_ticklabels(['0', '1'])
    ax.yaxis.set_ticklabels(['0', '1'])
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.