학습 가능한 파라미터(Trainable params)가 없음을 확인합니다. 이제 우리의 로컬 네트워크를 다음과 같이 만들어 줍니다.
64)) .add(Activation('relu')) .add(Dropout(0.5)) .add(Dense(1)) .add(Activation('sigmoid')) .summary()= models.Sequential() .add(transfer_model) .add(Flatten()) .add(Dense(
finetune_model이라는 이름의 모델을 만들었습니다. 위와 같이 첫 번째 층은 앞서 불러온 transfer_model을 그대로 불러온 후 최종 예측하는 층을 추가하면 됩니다. 다음은 finetune_model.summary() 함수를 통해 학습 구조를 살펴본 결과입니다.
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= vgg16 (Functional) (None, 4, 4, 512) 14714688 _________________________________________________________________ flatten (Flatten) (None, 8192) 0 _________________________________________________________________ dense (Dense) (None, 64) 524352 _________________________________________________________________ activation (Activation) (None, 64) 0 _________________________________________________________________ dropout (Dropout) (None, 64) 0 _________________________________________________________________ dense_1 (Dense) (None, 1) 65 _________________________________________________________________ activation_1 (Activation) (None, 1) 0 ================================================================= Total params: 15,239,105 Trainable params: 524,417 Non-trainable params: 14,714,688 _________________________________________________________________
앞서 넘겨받은 파라미터들(14,714,688)을 그대로 유지한 채 최종 분류를 위해서만 새롭게 학습하는 것을 알 수 있습니다. 코드를 종합하면 다음과 같습니다.