두 메서드는 서로 다른 질문에 답해
학습이 끝나면 모델에 두 가지를 물을 수 있어. model.evaluate(x_test, y_test)는 정답이 있는 데이터에서 모델이 얼마나 잘하는지를 재. compile()에 지정한 손실 함수와 평가지표를 계산해 숫자로 돌려주지. 반면 model.predict(x)는 정답 없이 입력만 받아 모델의 원시 출력을 내놓아. 성능을 채점할 때는 evaluate(), 실제 입력에 대한 판단을 얻을 때는 predict()를 쓰는 셈이야.
둘 다 추론 모드로 실행돼. Dropout은 꺼지고 BatchNormalization은 누적된 통계를 사용하며, 가중치는 바뀌지 않아. 학습 중에는 Dropout이 일부 연결을 일부러 끊으므로, 같은 모델이 평가할 때 더 좋은 점수를 보일 수도 있어.
출력값을 최종 결정으로 바꾸기
predict()가 분류 모델에서 반환하는 값은 보통 클래스별 확률이나 로짓이며 모양은 (num_samples, num_classes)야. 아직 클래스 번호가 아니므로 클래스 축에 argmax를 적용해야 해. 코드에서는 NumPy 대신 keras.ops.argmax를 썼어. 백엔드에 독립적인 연산이라 TensorFlow, PyTorch, JAX에서 같은 코드를 유지할 수 있지. 예전의 predict_classes는 폐기됐으니 명시적인 argmax를 사용해. predict()는 입력을 내부적으로 배치 처리하고, evaluate()는 학습과 검증에 쓰지 않은 시험 세트에서 일반화 성능을 확인하는 마지막 관문이야.