2017-02-18 306 views
1

我正在进口keras的preggined vgg模型,从keras.applications.vgg16 import VGG16。 我注意到标准型号是keras.models.Sequential,而预训练型号是keras.engine.training.Model型号。在standrd模型中,我可以使用add添加图层,并使用pop删除它们。在keras-pretrained模型中,我似乎无法使用pop。有没有其他的选择呢? 谢谢在keras预训练模型中,我可以删除图层吗?

+0

检查:http://stackoverflow.com/questions/41378461/how-to-use-models-from-keras-applications-for-transfer-learnig/ 41386444#41386444 – indraforyou

回答

0

取决于你想要删除。如果你想删除最后SOFTMAX层和使用转移的学习模式,你可以通过include_top=False kwarg到模型中,像这样:

from keras.applications.vgg16 import VGG16 
IN_SHAPE = (256, 256, 3) # image dimensions and RGB channels 

pretrained_model = VGG16(
    include_top=False, 
    input_shape=IN_SHAPE, 
    weights='imagenet' 
) 

我写了这个用例博客中最近有一些代码示例并进行更详细的说明:http://innolitics.com/10x/pretrained-models-with-keras/

如果您想要修改模型架构更多,可以通过pretrained_model.layers.pop()访问pop()方法,如链接@indraforyou发布中所述。

备注:当您修改预训练模型中的图层时,对结构和输入/输出形状进行可视化会特别有帮助。 pydotgraphviz是特别有用的:

import pydot 
pydot.find_graphviz = lambda: True 
from keras.utils import plot_model 
plot_model(model, show_shapes=True, to_file='../model_pdf/{}.pdf'.format(model_name))