TensorFlow를 사용하면 클래스 이름을 NumPy 배열로 변환한 뒤, tf.keras.layers.experimental.preprocessing 패키지에 포함된 Rescaling 메서드를 통해 정규화 계층을 간단하게 구축할 수 있습니다.
핵심 개념 이해하기
합성곱 신경망(CNN)이란?
최소 하나 이상의 합성곱 계층(convolutional layer)을 포함하는 신경망을 합성곱 신경망(Convolutional Neural Network)이라고 부릅니다. CNN은 이미지 인식과 분류에 특화되어 있으며, 이를 활용해 효율적인 학습 모델을 만들 수 있습니다.
전이 학습(Transfer Learning)의 직관
이미지 분류에서 전이 학습의 핵심 아이디어는 다음과 같습니다. 대규모 범용 데이터셋으로 학습된 모델은 시각적 세계에 대한 일반적인 모델로 효과적으로 재사용될 수 있다는 것입니다. 이러한 모델은 이미 특징 맵(feature map)을 학습한 상태이기 때문에, 사용자가 대규모 데이터셋으로 처음부터 모델을 학습시킬 필요가 없습니다.
TensorFlow Hub란?
TensorFlow Hub는 사전 학습된(pre-trained) TensorFlow 모델들을 모아놓은 저장소입니다. 이곳의 모델을 가져와 학습 모델을 미세 조정(fine-tuning)할 수 있습니다.
이 글에서는 TensorFlow Hub의 모델을 tf.keras와 함께 사용하는 방법과, Hub에서 제공하는 이미지 분류 모델을 활용하는 방법을 살펴봅니다. 사전 학습된 분류기 모델에 이미지를 입력하면 별도의 학습 없이도 해당 이미지가 무엇인지 예측할 수 있습니다. 이후에는 전이 학습을 통해 커스텀 이미지 클래스에 맞게 모델을 미세 조정할 수 있습니다.
개발 환경: Google Colaboratory
아래 코드는 Google Colaboratory에서 실행됩니다. Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU(그래픽 처리 장치)를 무료로 사용할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.
예제 코드
print("It contains 5 classes")
class_names = np.array(train_ds.class_names)
print(class_names)
print("A normalization layer is built")
normalization_layer = tf.keras.layers.experimental.preprocessing.Rescaling(1./255)
train_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))코드 출처 − https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub
실행 결과
It contains 5 classes ['daisy' 'dandelion' 'roses' 'sunflowers' 'tulips'] A normalization layer is built
코드 설명
- TFHub의 이미지 모델 규약(convention)은 [0, 1] 범위의 float 입력값을 요구합니다.
- Rescaling 계층을 사용하면 이러한 요구 사항을 쉽게 충족할 수 있습니다.
- 버퍼 기반 프리페칭(buffered prefetching)을 활용하면 디스크에서 I/O 블로킹 없이 데이터를 원활하게 가져올 수 있습니다.