あきらぼ

テック系ブログ

【Keras】【Tensorflow】VGG16ベースのモデルをSequentialモデルとFunctionalモデルで作る

こんにちは。

 

今回は以前作ったVGG16ベースで作った画像分類器をSequentialからFunctionalでモデルを作り直そうと思います。

 

以前作った画像分類器の記事はこちら。

aki-lab.hatenadiary.com

 

 

 

 

Sequential

前回はSequentialモデルでVGG16をベースとして前段にデータ拡張、後段に全結合層を追加していました。

 

具体的なコードはこんな感じ。

実際にモデルを確認してみます。

上記コードで作ったモデルに対して以下のように詳細を確認します。

model.summary()

以下のように表示されます。

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 rescaling (Rescaling)       (None, 256, 256, 3)       0         
                                                                 
 random_rotation (RandomRota  (None, 256, 256, 3)      0         
 tion)                                                           
                                                                 
 random_zoom (RandomZoom)    (None, 256, 256, 3)       0         
                                                                 
 random_flip (RandomFlip)    (None, 256, 256, 3)       0         
                                                                 
 random_translation (RandomT  (None, 256, 256, 3)      0         
 ranslation)                                                     
                                                                 
 vgg16 (Functional)          (None, None, None, 512)   14714688  
                                                                 
 flatten (Flatten)           (None, 32768)             0         
                                                                 
 dense (Dense)               (None, 512)               16777728  
                                                                 
 dropout (Dropout)           (None, 512)               0         
                                                                 
 dense_1 (Dense)             (None, 58)                29754     
                                                                 
=================================================================
Total params: 31,522,170
Trainable params: 23,886,906
Non-trainable params: 7,635,264
_________________________________________________________________

 

Functional

次は同じモデルをFunctionalモデルで作成します。

作成コードはこちらです。

 

先ほどと同じようにモデルを確認します。

Model: "model"
_________________________________________________________________
 Layer (type)                Output Shape              Param #
=================================================================
 input_1 (InputLayer)        [(None, 256, 256, 3)]     0

 rescaling (Rescaling)       (None, 256, 256, 3)       0

 random_rotation (RandomRota  (None, 256, 256, 3)      0
 tion)

 random_zoom (RandomZoom)    (None, 256, 256, 3)       0

 random_flip (RandomFlip)    (None, 256, 256, 3)       0

 random_translation (RandomT  (None, 256, 256, 3)      0
 ranslation)

 block1_conv1 (Conv2D)       (None, 256, 256, 64)      1792

 block1_conv2 (Conv2D)       (None, 256, 256, 64)      36928

 block1_pool (MaxPooling2D)  (None, 128, 128, 64)      0

 block2_conv1 (Conv2D)       (None, 128, 128, 128)     73856

 block2_conv2 (Conv2D)       (None, 128, 128, 128)     147584

 block2_pool (MaxPooling2D)  (None, 64, 64, 128)       0

 block3_conv1 (Conv2D)       (None, 64, 64, 256)       295168

 block3_conv2 (Conv2D)       (None, 64, 64, 256)       590080

 block3_conv3 (Conv2D)       (None, 64, 64, 256)       590080

 block3_pool (MaxPooling2D)  (None, 32, 32, 256)       0

 block4_conv1 (Conv2D)       (None, 32, 32, 512)       1180160

 block4_conv2 (Conv2D)       (None, 32, 32, 512)       2359808

 block4_conv3 (Conv2D)       (None, 32, 32, 512)       2359808

 block4_pool (MaxPooling2D)  (None, 16, 16, 512)       0

 block5_conv1 (Conv2D)       (None, 16, 16, 512)       2359808

 block5_conv2 (Conv2D)       (None, 16, 16, 512)       2359808

 block5_conv3 (Conv2D)       (None, 16, 16, 512)       2359808

 block5_pool (MaxPooling2D)  (None, 8, 8, 512)         0

 flatten (Flatten)           (None, 32768)             0

 dense (Dense)               (None, 512)               16777728

 dropout (Dropout)           (None, 512)               0

 dense_1 (Dense)             (None, 58)                29754

=================================================================
Total params: 31,522,170
Trainable params: 23,886,906
Non-trainable params: 7,635,264
_________________________________________________________________

VGG16モデルが展開されてしまっていますが、意図通り、Functionalモデルで作成することができました。

 

次回はこちらで学習させて量子化した計量モデルを作っていこうと思います。