在Keras中,在我自己的模型上使用include_top = False是否会删除所有最后的密集层,我是否可以定义模型的“顶部”?

问题描述

我可以定义要定义为“顶部”的哪些层。

据我了解,include_top = false将删除顶部的所有密集层。 我想使用“ include_top = False”进行我自己的模型的迁移学习,并且不希望我所有的最后密集层都被自动删除

解决方法

要访问最后一个密集层,您必须设置include_top = True。这样,您可以创建具有所需所有中间层的子模型。这是VGG16的示例

from tensorflow.keras.layers import *
from tensorflow.keras.models import *
from tensorflow.keras.applications import VGG16

vgg = VGG16(include_top = True,input_shape = (224,224,3))
new_layer = Dense(32)(vgg.layers[-3].output) # add new layer

sub_model = Model(vgg.input,new_layer)

在这种情况下,sub_model的最后一层是:

block5_conv3 (Conv2D)        (None,14,512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None,7,512)         0         
_________________________________________________________________
flatten (Flatten)            (None,25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None,4096)              102764544 
_________________________________________________________________
dense_6 (Dense)              (None,32)                131104