我正在Keras中导入预先训练好的VGG模型
from keras.applications.vgg16 import VGG16
我注意到标准模型的类型是 keras.models.Sequential ,而预先训练的模型是 keras.engine.training.Model . 我通常分别使用 add 和 pop 为顺序模型添加和删除图层,但是,我似乎无法使用带有预训练模型的 pop .
keras.models.Sequential
keras.engine.training.Model
add
pop
对于这些类型的模型,是否有 pop 的替代品?
取决于你想要删除的内容 . 如果要删除最后一个softmax图层并使用模型进行传递学习,可以将 include_top=False kwarg传递给模型,如下所示:
include_top=False
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发布的链接中所述 .
pretrained_model.layers.pop()
pop()
旁注:当您在预训练模型中修改图层时,对结构和输入/输出形状进行可视化尤其有用 . pydot 和 graphviz 对此特别有用:
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))
1 回答
取决于你想要删除的内容 . 如果要删除最后一个softmax图层并使用模型进行传递学习,可以将
include_top=False
kwarg传递给模型,如下所示:我最近写了一篇关于这个用例的博客文章,里面有一些代码示例,并详细介绍了一些:http://innolitics.com/10x/pretrained-models-with-keras/
如果您想要修改模型体系结构,可以通过
pretrained_model.layers.pop()
访问pop()
方法,如@indraforyou发布的链接中所述 .旁注:当您在预训练模型中修改图层时,对结构和输入/输出形状进行可视化尤其有用 .
pydot
和graphviz
对此特别有用: