예전에 써둔 코드 열어보니까 train/val dataset은 flow_from_directory로 만든 다음에 학습 후 predict때는 openCV로 이미지 읽어와서 0-1 정규화 후에 그대로 predict에 넣고 예측했었음


이렇게 하면 결과값이 엉망으로 나왔었고.. 이걸 해결하려고 train/val dataset을 미리 h5py로 h5파일로 변환 후에 학습시켰더니 학습결과가 제대로 나왔음.


물론 이렇게 하니까 램 터져서 가지고있는 이미지를 학습에 다 쓰질 못했고 라벨당 300장으로 엄청 줄여야 했었음 ㅋㅋ


근데 검색해 보니까 flow_from_directory의 상위호환이라는 image_dataset_from_directory가 나와있길래 샘플코드 복붙해서 봤는데 얘는 predict 할 때 


img = keras.preprocessing.image.load_img("image_dir/image.jpeg", 

                                         target_size=image_size)

img_array = keras.preprocessing.image.img_to_array(img)

img_array = tf.expand_dims(img_array, 0)  # Create batch axis

predictions = model.predict(img_array)

score = predictions


이런 식으로 keras에 있는 load_img를 쓴 후에 img_to_array 하고 expand_dims(이건 이해안됨) 한 뒤에 predict하니까 정상적으로 결과가 나옴.


결국 image_dataset_from_directory로 train/val dataset을 만들어서 학습시켰으면 predict때 keras에서 제공하는 load_img를 써야 정상적인 결과가 나온다는걸 알 수 있었음미다...


load_img가 preprocessing에 있는걸 보니..결론은 train과 predict의 image preprocessing의 방법이 같아야 predict도 제대로 나온다.. 인것 같네여 ㅎ


이제 image_dataset_from_directory나 load_img에서 image preprocessing이 어떤식으로 들어가는지를 찾아봐야겠슴미다..