微调的InceptionV3模型无法按预期工作

时间:2019-05-19 14:05:17

标签: keras deep-learning keras-layer

尝试在InceptionV3中使用转移学习(微调),删除最后一层,关闭所有层的训练,并添加单个密集层。当我再次查看摘要时,看不到添加的图层,也没有得到期望。

  

RuntimeError:您尝试在density_7上调用count_params,但是   层没有建立。您可以通过以下方式手动构建它:   dense_7.build(batch_input_shape)

from keras import applications
pretrained_model = applications.inception_v3.InceptionV3(weights = "imagenet", include_top=False, input_shape = (299, 299, 3))

from keras.layers import Dense
for layer in pretrained_model.layers:
  layer.trainable = False

pretrained_model.layers.pop()

layer = (Dense(2, activation='sigmoid'))
pretrained_model.layers.append(layer)

再次查看摘要会产生上述异常。

pretrained_model.summary()

想训练编译和拟合模型,但是

pretrained_model.compile(optimizer=RMSprop(lr=0.0001), 
              loss = 'sparse_categorical_crossentropy', metrics = ['acc'])

上一行显示此错误,

  

无法解释优化程序标识符:   

1 个答案:

答案 0 :(得分:0)

您正在使用pop在网络末端弹出像Dense这样的完全连接的层。但这已经通过参数include top = False完成。因此,您只需要使用include_top = False初始化Inception,然后添加最终的Dense层。另外,由于它是InceptionV3,所以建议您在InceptionV3输出之后添加GlobalAveragePooling2D(),以减少过拟合。这是代码,

from keras import applications
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D

pretrained_model = applications.inception_v3.InceptionV3(weights = "imagenet", include_top=False, input_shape = (299, 299, 3))


x = pretrained_model.output
x = GlobalAveragePooling2D()(x) #Highly reccomended

layer = Dense(2, activation='sigmoid')(x)

model = Model(input=pretrained_model.input, output=layer)

for layer in pretrained_model.layers:
  layer.trainable = False

model.summary()

这应该为您提供所需的模型以进行微调。