[Data Science] Transfer Learning

1 minute read

Transfer Learning

이번시간에는 Transfer Learning(전이학습)에 대하여 알아보도록 하겠습니다. 전이학습이란 기존에 구축된 모델을 사용하여 학습할 모델에 적용하는 것을 의미합니다. 이미 훌륭한 알고리즘 및 모델을 이용하여 효과적이고 빠르게 새로운 모델을 구축할 수 있습니다.

그렇다면 VGG16 모델을 전이학습을 통하여 새로운 모델을 만들고 예측을 해보도록 하겠습니다. 먼저 VGG모델의 구조는 하기와 같습니다. 저희는 하기의 구조를 이용하여 손쉽게 예측모델을 생성할 수 있습니다.

model_base = VGG16(weights='imagenet',
                   include_top=False,
                   input_shape=(150,150,3))
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 150, 150, 3)]     0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 150, 150, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 150, 150, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 75, 75, 64)        0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 75, 75, 128)       73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 75, 75, 128)       147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 37, 37, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 37, 37, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 37, 37, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 37, 37, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 18, 18, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 18, 18, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 18, 18, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 18, 18, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 9, 9, 512)         0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 4, 4, 512)         0         
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0

모델 전이

하기 코드를 통해 새로운 모델을 정의하고 모델에 VGG모델을 전의하여 새로운 모델을 생성할 수 있습니다. 다만 모델 테이블을 확인하여 마지막 output의 shape에 주의하셔서 전이모델을 이어 받으시면 됩니다.

model_base = VGG16(weights='imagenet',
                   include_top=False,
                   input_shape=(150,150,3))

model_base.trainable = False  # Convolution Layer 동결
model = Sequential()
model.add(model_base)
model.add(Flatten(input_shape=(4*4*512,)))

Leave a comment