首页 文章

我可以在经过预先训练的Keras模型中删除图层吗?

提问于
浏览
1

我正在Keras中导入预先训练好的VGG模型

from keras.applications.vgg16 import VGG16

我注意到标准模型的类型是 keras.models.Sequential ,而预先训练的模型是 keras.engine.training.Model . 我通常分别使用 addpop 为顺序模型添加和删除图层,但是,我似乎无法使用带有预训练模型的 pop .

对于这些类型的模型,是否有 pop 的替代品?

1 回答

  • 1

    取决于你想要删除的内容 . 如果要删除最后一个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))
    

相关问题