我正在Keras导入预先训练好的VGG模型,
from keras.applications.vgg16 import VGG16
我注意到标准模型的类型是keras.models.Sequential
,而预先训练的模型是keras.engine.training.Model
。对于顺序模型,我通常分别使用add
和pop
添加和删除图层,但是,我似乎无法将pop
与预先训练的模型一起使用。
对于这些类型的模型,是否有pop
的替代方案?
答案 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发布链接中所述。
旁注:当您在预训练模型中修改图层时,对结构和输入/输出形状进行可视化会特别有用。 pydot
和graphviz
对此非常有用:
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))