【问题标题】:How to use a pretrained keras model to be a parameter to a Model's add function?如何使用预训练的 keras 模型作为模型添加函数的参数?
【发布时间】:2019-02-16 21:44:20
【问题描述】:

我正在将 Deep Learning with python 中的预训练模型教程应用到 kaggle 上的数据集。下面是我的 CNN 架构代码,虽然很简单,但我得到了这个错误:

TypeError:添加的层必须是类Layer的实例。找到:keras.engine.training.Model 对象位于 0x7fdb6a780f60

我在使用原生 keras 时能够做到这一点,但在尝试使用 tensorflow 2.0 时遇到了问题

from keras.applications.vgg16 import VGG16

base = VGG16(weights='../input/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5',
             include_top=False,
             input_shape=(150,225,3))

model = models.Sequential()
model.add(base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

base.summary()

【问题讨论】:

    标签: python keras pre-trained-model


    【解决方案1】:

    你需要切换到functional API,因为顺序模型只接受层:

    from keras.applications.vgg16 import VGG16
    
    base = VGG16(weights='../input/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5',
                 include_top=False,
                 input_shape=(150,225,3))
    
    in = Input(shape=(150,225,3))
    base_out = base(in)
    out = Flatten()(base_out)
    out = Dense(256, activation='relu')
    out = Dense(1, activation='sigmoid')
    model = Model(in, out)
    model.summary()
    

    注意如何将模型用作功能 API 中的层。

    【讨论】:

    • 但是模型一个层——至少根据kerasModel继承自Layer的事实
    • 是的,可能在最新版本中已经修复了,需要检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多