尝试在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'])
上一行显示此错误,
无法解释优化程序标识符:
答案 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()
这应该为您提供所需的模型以进行微调。