我试图做使用Keras其内置预ImageNet CNN架构的简单的二元分类问题。
对于VGG16,我采取了以下做法,
vgg16_model = keras.application.vgg16.VGG16()
'''Rebuild the vgg16 using an empty sequential model'''
model = Sequential()
for layer in vgg16_model.layers:
model.add(layer)
'''Since the problem is binary, I got rid of the output layer and added a more appropriate output layer.'''
model.pop()
'''Freeze other pre-trained weights'''
for layer in model.layers:
layer.trainable = False
'''Add the modified final layer'''
model.add(Dense(2, activation = 'softmax'))
这比我定制CNN精度更高的工作奇妙。 但用了一段时间来训练,我想带使用Xception和InceptionV3因为他们以更高的精度较轻便的型号类似的方法。
xception_model = keras.applicaitons.xception.Xception()
model = Sequential()
for layer in xception_model.layers:
model_xception.add(layer)
当我运行上面的代码,我得到以下错误:
ValueError: Input 0 is incompatible with layer conv2d_193: expected axis -1 of input shape to have value 64 but got shape (None, None, None, 128)
基本上,我愿做同样的事情,我VGG16模型做了; 保持其他预训练的权重,因为它们是与简单地修改输出层,以二元分类输出,而不是与1000分的结果的输出层。 我可以看到,不像VGG16,具有相对简单的卷积层结构,Xception和InceptionV3有一个我不熟悉的100%,一些时髦的节点,我假设这些都是造成问题。 如果任何人都可以帮忙排序的问题,它会非常感谢!
谢谢!