TensorFlow는 버퍼링된 프리페칭(buffered prefetching)을 활용하여 특징 추출기(feature extractor)를 만드는 데 사용할 수 있습니다. 이는 trainable=False로 설정하는 방식으로 구현됩니다.
전이 학습(Transfer Learning)의 핵심 개념
최소 한 개 이상의 컨볼루션 레이어(convolutional layer)를 포함하는 신경망을 컨볼루션 신경망(CNN)이라고 하며, 이를 활용해 학습 모델을 구축할 수 있습니다.
이미지 분류에서 전이 학습의 직관적인 아이디어는 다음과 같습니다. 대규모의 일반적인 데이터셋으로 학습된 모델은 시각적 세계를 위한 범용 모델로 효과적으로 활용될 수 있다는 것입니다. 이미 그 모델은 특징 맵(feature map)을 학습했기 때문에, 사용자가 대규모 데이터셋으로 거대한 모델을 처음부터 다시 학습시킬 필요가 없습니다.
TensorFlow Hub는 사전 학습된 TensorFlow 모델들을 담고 있는 저장소(repository)입니다. TensorFlow는 이러한 사전 학습 모델을 미세 조정(fine-tuning)하는 데에도 활용할 수 있습니다.
이 글에서는 tf.keras와 함께 TensorFlow Hub의 모델을 사용하는 방법과, TensorFlow Hub에서 제공하는 이미지 분류 모델을 활용하는 방법을 살펴봅니다. 이후 전이 학습을 수행하여 사용자 정의 이미지 클래스에 맞게 모델을 미세 조정할 수 있습니다. 이 과정은 사전 학습된 분류기 모델이 이미지를 입력받아 무엇인지 예측하도록 하는 방식으로 진행되며, 별도의 학습 없이도 가능합니다.
아래 코드는 Google Colaboratory에서 실행했습니다. Google Colab 또는 Colaboratory는 브라우저에서 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU(그래픽 처리 장치)에 무료로 접근할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.
예제 코드
AUTOTUNE = tf.data.AUTOTUNE
train_ds = train_ds.cache().prefetch(buffer_size=AUTOTUNE)
print("데이터의 차원")
for image_batch, labels_batch in train_ds:
print(image_batch.shape)
print(labels_batch.shape)
break코드 출처 − https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub
실행 결과
데이터의 차원 (32, 224, 224, 3) (32,)
코드 설명
- TFHub는 최상위 분류 레이어(classification layer) 없이 모델을 배포합니다.
- 따라서 이 모델들은 전이 학습에 활용할 수 있습니다.
- tfhub.dev에서 호환되는 어떤 이미지 특징 벡터 모델이라도 사용 가능합니다.
- trainable=False 옵션을 통해 특징 추출기를 생성할 수 있습니다.
- 이 설정은 특징 추출기 레이어 내부의 변수들을 고정(freeze)하는 역할을 합니다.
- 이렇게 하면 학습 과정에서 새로운 분류기 레이어만 업데이트됩니다.
- 각 이미지에 대해 길이 1280짜리 벡터가 반환됩니다.