22. TensorFlow 2.x - Transfer Learning 예제 Cats and Dogs
참고: https://youtu.be/fAgTGrcKE2E?si=bfLVolsRt-a8msCa
앞에서 알아본 Transfer Learning을 실제 코드로 구현해서 cats and dogs 문제를 추론해보자.
먼저, 학습을 위해서 data를 다운로드 받아 압축을 풀어 놓아야 한다.
https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip
( 파일이 커서 첨부가 되지 않아 직접 받으시길...)
사전 학습된 모델은 Xception을 사용하였고, 특징 추출기만 가져왔다.
다운받아 압축을 풀어 파일들이 작업디렉토리 밑에 content/cats_and_dogs_filtered 아래에 있다고 가정한다.
학습용 데이터가 많지 않기 때문에 앞에서 배운 Image Data Augmentation을 사용하여 학습 데이터의 수를 늘렸다. https://firstmove.tistory.com/30
아래 부분의 class_indices를 이용하면, 정답과 그 표기를 알 수 있다.
loss와 optimizer를 선택하고 컴파일 한 뒤에,
ModelCheckpoint, EarlyStopping을 설정한 뒤에 학습시킨다. 처음에는 정확도가 83% 정도였다.
EarlyStopping 조건에 의해서 14번 학습후에 종료하였다. 이래도 정확도는 99%이다.
한가지 살펴볼 것은 optimizer를 Adam으로 설정할 때 '2e-5'라는 인수를 주었다는 것이다. 이는 fine-tuning에서 학습률을 낮춰서 pre-trained weights를 조금씩 업데이트 해주는 것을 의미한다.
loss는 학습하면서 계속 줄지만 검증하면서는 일정 이하로 내려가지 않고
accuracy도 같은 경향을 보이고 있다. 물론 이것은 앞에서 배운 overfitting을 극복하는 방법을 사용하면 더 좋아질 수 있을 것이다.
이제 나만의 사진을 가지고 이 모델이 잘 작동하는지 검증해보자.몇개의 사진을 인터넷에서 다운로드 해서 ./content/test_image_dir 에 저장하였다.
위의 그림들이 인터넷에서 받아온 사진들이다. 이 사진들의 추론 결과를 보자.
매우 높은 확률로 옳은 추론을 하였음을 알 수 있다.
다음 글에서는 Transfer Learning을 이용하여 또 다른 예제를 해보도록 하자.