AI/TensorFlow 학습

22. TensorFlow 2.x - Transfer Learning 예제 Cats and Dogs

된다잘된다 2024. 8. 22. 13:29

참고: 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을 이용하여 또 다른 예제를 해보도록 하자.