메서드 둘, 질문 둘
학습 끝났으면 model 한테 다른 두 가지를 물어봐. model.evaluate(x_test, y_test) 는 *얼마나 좋냐* — compile 때 넣은 loss / metric 을 labeled data 위에서 돌려 숫자로 돌려줘. model.predict(x) 는 *뭐라고 생각하냐* — unlabeled input 받아 raw output 반환. 채점할 정답 있으면 evaluate, 실제로 model 쓸 땐 predict.
둘 다 inference mode 로 돌아 — dropout 꺼지고, batch-norm 은 running 통계 쓰고, weight 는 안 바뀌어. model 이 학습 중엔 더 나빠 보이다가 (dropout 이 일부러 방해) evaluate 때 점수 더 잘 나오는 이유가 이거야.
probability 에서 결정으로
predict() 는 class 별 probability (또는 logit) 를 (num_samples, num_classes) 모양으로 줘 — label 이 아니야. 예측 class 뽑으려면 class 축으로 argmax, Code 섹션처럼. NumPy 말고 keras.ops.argmax 쓴 거 봐 — backend-agnostic op 라 TensorFlow / PyTorch / JAX 어디서든 같은 줄이 돌아. 옛날 predict_classes 단축은 deprecated — argmax 가 명시적이고 portable 한 대체야. predict 는 내부에서 batch 처리하니 메모리보다 큰 dataset 던져도 안 터져. evaluate 는 학습 끝낸 후 의무 — 학습/validation 밖의 *test* set 에서 일반화 성능 확인.