我正在经典的Cat-Dog Kaggle数据集上学习CNN。我正在尝试实现不同的CNN架构; ResNet在列表上排名第二。
我了解ResNet(特别是ResNet50)是一种功能模型。最后一层如下:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
fc1000 (Dense) (None, 1000) 2049000 avg_pool[0][0]
我想将其更改为2输出密集层。当我使用VGG-16进行此操作时,我使用了以下代码:
vgg16_model = Sequential()
for layer in pre_vgg16_model.layers:
vgg16_model.add(layer)
vgg16_model.layers.pop()
for layer in vgg16_model.layers:
layer.trainable = False
vgg16_model.add(Dense(2, activation='softmax'))
自然,这在这里不起作用,因为它不是顺序的。 Keras文档似乎表明功能模型以更“裸露的”风格构建,在模型开发时定义和重新定义张量。问题是,如果这样做,我将失去预训练的好处。
对于功能的CNN模型,我如何对最终的密集层执行类似的弹出和替换操作?