본문 바로가기
  • 콩's 코딩노트
TensorFlow

Transfer Learning 과 Fine Tunning

by Cong_S 2022. 6. 16.

 

Transfer Learning 이란?

Transfer Learning 이란 기존의 잘 만들어진 모델을 활용하는 방법으로

다양한 상황과 용도에 맞게 학습되어 성능이 검증된 인공지능 모델들을 가져와 

활용하는 방법이다.

 

위 이미지를 예시로  보면

ImageNet

이라는 1000개의 클래스와 1400만개의 데이터를 가지고 있는 이미지 데이터 셋을 통해 학습시켜

성능이 검증된 모델을 가져와 활용하는 것을 볼 수 있다.

 

이 때 가장 중요한 개념은 다음과 같다.

Base Model과 Head Model을 구분하는 일이다.

이미지의 특징을 잡아내는 학습을 거친 Base Model은 다시 학습되면 안되므로 

Head Model과 구분지어 프리징해야한다.

 

먼저 Base Model을 프리징하는 방법은 다음과 같다.

 

# 우리가 만들려는 모델의 이미지는 128, 128, 3으로 한다.
IMG_SHAPE = (128, 128, 3)

# 베이스 모델 불러오기
base_model =  tf.keras.applications.MobileNetV2(IMG_SHAPE, include_top= False)

# 베이스 모델 프리징
base_model.trainable = False

 

이제 Head Model을 모델링하면 된다.

 

head_model = base_model.output

# 이 때 기본이 되는 시퀀셜이 없으므로 텐서플로우에서 제공하는 함수형 모델을 사용한다.
# 추가할 레이어를 작성한 후 그 옆 괄호에 함수 파라미터 값 입력하듯이 모델을 넣어준다.
# 위와 같은 방법을 함수형 모델링이라 한다.

head_model = tf.keras.layers.GlobalAveragePooling2D()(head_model)
head_model = tf.keras.layers.Dense(128, 'relu')(head_model)
head_model = tf.keras.layers.Dense(1, 'sigmoid')(head_model)

 

마지막으로 Base Model과 Head Model을 붙여준다.

 

model = tf.keras.models.Model(inputs = base_model.input , outputs= head_model )

 

모델링이 완성되었고 컴파일 후 학습을 진행하면 된다.

 


Fine Tunning 이란?

Fine Tuning이란 무조건 Transfer Learning (학습을 한 번 이상 진행한 상태)에서 수행하는 방법이다.

즉, Fine Tuning 이란 먼저 학습을 한 상태에서, 추가로 학습을 시키는 것이다.

 

fine tuning은 원하는 레이어를 기준으로

그 앞에는 여전히 학습되지 않게 하고

그 레이어 기준 뒤의 과정은 학습이 되게 만들어 부분적으로 학습되도록 만드는 것이다.

 

# 1. 먼저 베이스 모델의 전체 레이어를 학습 가능토록 먼저 바꿔준다.
base_model.trainable = True

 

Fine Tuning의 과정은 다음과 같다.

제일 먼저 베이스 모델의 프리징을 푼다.

 

# 2. 베이스 모델의 전체 레이어 수를 확인한다.
len(base_model.layers)

 

전체 레이어의 수를 확인한 후 어느정도 레이어를 기준잡을지 생각해본다.

 

# 3. 다시 프리징할 레이어를 정해야 한다. == 몇 번째 레이어 이후부터 학습이 되게 하고 싶은지
end_layer = 100

 

앞에서 정한 기준이 될 레이어의 번호를 변수에 저장한다.

 

# 4. 베이스 모델의 첫번째 레이어부터, 위에서 정한 end_layer 까지는 학습이 안되도록 프리징해준다.
for layer in base_model.layers[ 0 : end_layer] : 
  layer.trainable = False

 

for 반복문을 통해 Base Model의 레이어를 정한 레이어의 수만큼 다시 프리징한다.

이후에 다시 컴파일 후 학습을 진행하면 된다.

 

 Fine Tuning 은 성능이 오를수도 떨어질수도 있지만

조금이라도 더 인공지능의 성능을 높이려는 목적으로 진행하는 것이다.

 

댓글