TensorFlow에서는 matplotlib 라이브러리의 plot() 메서드를 활용하여 훈련 단계(Training Steps)에 따른 손실(Loss) 변화를 손쉽게 시각화할 수 있습니다. 이를 통해 모델이 학습되는 과정을 한눈에 파악하고, 학습이 제대로 진행되고 있는지 확인할 수 있습니다.
전이 학습(Transfer Learning)과 CNN의 개요
하나 이상의 합성곱 계층(Convolutional Layer)을 포함하는 신경망을 합성곱 신경망(CNN, Convolutional Neural Network)이라고 하며, 이를 활용해 이미지 분류 등의 학습 모델을 구축할 수 있습니다.
이미지 분류에서 전이 학습의 핵심 아이디어는 다음과 같습니다. 대규모의 일반적인 데이터셋으로 미리 학습된 모델은 시각적 세계를 이해하는 범용 모델로 활용될 수 있습니다. 즉, 이미 학습된 특징 맵(feature map)을 재사용하기 때문에 사용자가 처음부터 대용량 데이터셋으로 거대한 모델을 학습시킬 필요가 없습니다.
TensorFlow Hub란?
TensorFlow Hub는 사전 학습된(pre-trained) TensorFlow 모델들을 모아놓은 저장소입니다. 이곳에서 제공하는 모델을 가져와 파인튜닝(fine-tuning)함으로써, 사용자 정의 이미지 클래스에 맞는 학습 모델을 효율적으로 만들 수 있습니다.
TensorFlow Hub의 모델은 tf.keras와 함께 사용할 수 있습니다. 사전 학습된 분류기 모델에 이미지를 입력하면 별도의 추가 학습 없이도 해당 이미지가 무엇인지 예측할 수 있으며, 이후 전이 학습을 적용해 원하는 클래스에 맞게 모델을 세밀하게 조정할 수 있습니다.
실행 환경: Google Colaboratory
본 예제 코드는 Google Colaboratory(Colab)에서 실행합니다. Colab은 브라우저에서 바로 Python 코드를 실행할 수 있는 환경으로, 별도의 설정이 필요 없으며 GPU(그래픽 처리 장치)를 무료로 사용할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.
예제 코드
print("Visualizing the data - loss versus training steps")
plt.figure()
plt.ylabel("Loss")
plt.xlabel("Training Steps")
plt.ylim([0,2])
plt.plot(batch_stats_callback.batch_losses)코드 출처: https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub
결과 및 해설
- 여러 차례의 훈련 반복(iteration)이 진행되면 모델이 점진적으로 성능을 향상시키는 것을 확인할 수 있습니다.
- 이러한 학습 진행 상황은 콘솔에 훈련 단계(x축) 대비 손실(y축) 형태의 그래프로 시각화되며, 손실 값이 꾸준히 감소하는 추세를 통해 모델이 올바르게 학습되고 있음을 알 수 있습니다.