훈련 데이터셋과 더불어 테스트 데이터셋을 모델에 적용하여 정확도를 측정해 보겠습니다. 측정 결과는 데이터 프레임에 담아 둔 후 CSV 파일로 저장합니다. 테스트 용도의 데이터셋을 이용하므로 model.eval()을 사용합니다.
코드 6-18 모델 테스트를 위한 함수 정의
import pandas as pd
id_list = []
pred_list = []
_id = 0
with torch.no_grad(): ------ 역전파 중 텐서들에 대한 변화도를 계산할 필요가 없음을 나타내는 것으로, 훈련 데이터셋의 모델 학습과 가장 큰 차이점입니다.
for test_path in tqdm(test_images_filepaths): ------ 테스트 데이터셋 이용
img = Image.open(test_path)
_id = test_path.split('/')[-1].split('.')[1]
transform = ImageTransform(size, mean, std)
img = transform(img, phase='val') ------ 테스트 데이터셋 전처리 적용
img = img.unsqueeze(0) ------ ①
img = img.to(device)
model.eval()
outputs = model(img)
preds = F.softmax(outputs, dim=1)[:, 1].tolist() ------ ②
id_list.append(_id)
pred_list.append(preds[0])
res = pd.DataFrame({
'id': id_list,
'label': pred_list
}) ------ 테스트 데이터셋의 예측 결과인 id와 레이블(label)을 데이터 프레임에 저장
res.sort_values(by='id', inplace=True)
res.reset_index(drop=True, inplace=True)
res.to_csv('../chap06/data/LeNet', index=False) ------ 데이터 프레임을 CSV 파일로 저장