모델 학습에서 사용할 옵티마이저와 손실 함수를 정의합니다.
코드 6-53 옵티마이저와 손실 함수 정의
optimizer = optim.Adam(model.parameters(), lr=1e-7)
criterion = nn.CrossEntropyLoss()
model = model.to(device)
criterion = criterion.to(device)
모델에 대한 정확도를 측정하기 위한 함수를 정의합니다.
코드 6-54 모델 정확도 측정 함수
def calculate_accuracy(y_pred, y):
top_pred = y_pred.argmax(1, keepdim=True)
correct = top_pred.eq(y.view_as(top_pred)).sum() ------ ①
acc = correct.float() / y.shape[0]
return acc
① 예측이 정답과 일치하는 경우 그 개수의 합을 correct 변수에 저장합니다.
ⓐ eq는 equal의 약자로 서로 같은지를 비교하는 표현식입니다.
ⓑ view_as(other)는 other의 텐서 크기를 사용하겠다는 의미입니다. 즉, view_as(other)는 view(other.size())와 같은 의미입니다. 따라서 y.view_as(top_pred)는 y에 대한 텐서 크기를 top_pred의 텐서 크기로 변경하겠다는 의미입니다.
ⓒ 합계를 구하는 것으로, 여기에서는 예측과 정답이 일치하는 것들의 개수를 합산하겠다는 의미입니다.