본문으로 바로가기

Transfer Learning (전이학습)

(참조: https://bskyvision.com/698)

 

배경:

딥러닝은 머신러닝과 달리 사용하기 위해서는 일반적으로 10,000 단위 이상의 labeled된 아주 큰 데이터셋이 필요하다. 하지만 이렇게 labeled된 큰 데이터셋을 구하기는 쉽지 않기 때문에 "전이학습"이라는 해결책이 제시되었다.

 

정의: 

전이학습이란 이미지넷과 같이 아주 큰 데이터셋에 훈련된 모델의 가중치를 가지고 와서 우리가 해결하고자 하는 과제에 맞게 재보정해서 사용하는 것을 말한다. 

다시 말하자면, 우리가 해결하고자 하는 문제를 해결하기 위해 처음부터 대규모 모델을 쌓아올릴 필요 없이 그와 비슷한 이미 훈련된 모델의 지식을 적용하는 것이다.

 

 


(참조: https://www.tensorflow.org/tutorials/images/transfer_learning?hl=ko)

(자세한 코드를 공부하고 이해하고 싶다면, 위의 tensorflow 링크를 들어가셔서 보시면 됩니다!)

사전 훈련된 모델을 사용자 정의하는 방법

1. 특성 추출

2. 미세 조정

 

진행 과정

1. 데이터 검사 및 이해

2. 입력 파이프 라인 빌드(ex. Keras ImageDataGenerator)

3. 모델 작성

   - 사전 훈련된 기본 모델(또한 사전 훈련된 가중치)에 적재

   - 분류 레이어를 맨 위에 쌓기

4. 모델 훈련

5. 모델 평가

 

 

* 예시 코드 출처:

https://codelabs.developers.google.com/codelabs/keras-flowers-transfer-learning/#3

pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False
# include_top=False : Output layer 벗겨내고 들고오기 (+ 우리 데이터에 맞는 Output layer 추가할 것)
# trainable=False : 학습 안되게끔 꺼버림

model = tf.keras.Sequential([
    pretrained_model,   # theta 고정
    tf.keras.layers.Flatten(),   # 내 코드에 추가(마지막 layer에서 우리의 데이터 학습)
    tf.keras.layers.Dense(5, activation='softmax')   # 내 코드에 추가
])