더북(TheBook)

훈련 데이터는 시간이 흐를수록 정확도는 높아지고 오차는 낮아지고 있지만, 검증 데이터는 시간이 흘러도 변동이 없는 것을 확인할 수 있습니다. 즉, 예측력이 좋지 못하다는 것을 의미하는데, 실제로 개와 고양이에 대한 예측을 진행해 보겠습니다.

코드 5-19 훈련된 모델의 예측

class_names = ['cat', 'dog'] ------ 개와 고양이에 대한 클래스 두 개
validation, label_batch = next(iter(valid_generator)) ------ ①
prediction_values = model.predict_classes(validation)

fig = plt.figure(figsize=(12,8))
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)

for i in range(8): ------ 이미지 여덟 개에 대해 출력
    ax = fig.add_subplot(2, 4, i+1, xticks=[], yticks=[])
    ax.imshow(validation[i,:], cmap=plt.cm.gray_r, interpolation='nearest')
    if prediction_values[i] == np.argmax(label_batch[i]):
        ax.text(3, 17, class_names[prediction_values[i]], color='yellow', fontsize=14)
    else:
        ax.text(3, 17, class_names[prediction_values[i]], color='red', fontsize=14)

① 반복자(iterator)를 사용하려면 iter() 메서드와 next() 메서드가 필요합니다. iter() 메서드는 전달된 데이터의 반복자를 꺼내 반환하며, next() 메서드는 반복자를 입력으로 받아 그 반복자가 다음에 출력해야 할 요소를 반환합니다. 즉, iter() 메서드로 반복자를 구하고 그 반복자를 next() 메서드에 전달하여 차례대로 꺼낼 수 있습니다. 앞의 코드에서 반복자는 valid_generator가 되기 때문에 validation, label_batchvalid_generator의 값을 순차적으로 저장합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.