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

时间:2017-02-18 10:25:24

标签: machine-learning keras

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

from keras.applications.vgg16 import VGG16

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

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

1 个答案:

答案 0 :(得分:2)

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

如果您想要修改模型体系结构,可以通过pop()访问pretrained_model.layers.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))