【问题标题】:How to remove (pop) initial layers of Keras InceptionV3 pre-trained model?如何删除(弹出)Keras InceptionV3 预训练模型的初始层?
【发布时间】:2019-09-21 15:14:15
【问题描述】:

我正在尝试使用预训练的 InceptionV3 模型。但是,我想删除最初的五个图层并添加我的自定义图层。我怎样才能做到这一点?我试过model.layers.pop(0),但这并不能解决问题。

编辑:

tf.keras 在第一个答案中也没有帮助:

【问题讨论】:

    标签: python tensorflow keras tf.keras


    【解决方案1】:

    model.layers.pop()tf.keras 中的工作方式与在Keras 中的工作方式不同。在tf.keras 中,model.layers 是模型的视图。您无法删除图层,但您可以做的是定义您想要输出的图层。例如,

    base_model = InceptionV3(shape=shape, weights="imagenet", include_top=True)
    
    # you don't want the last five layers:
    base_model_output = base_model.layers[-6].output
    
    # new layers
    outputs = Dense(....)(base_model_output)
    model = Model(base_model.input, outputs)
    

    【讨论】:

    • 感谢您的回复。但是,我正在寻找删除initial 五层。我有自定义输入和其他图层。
    • 这仅相当于那个。您可以选择任何层输入作为模型的输入,选择任何层输出作为模型的输出
    • 谢谢,但没有帮助。你能检查一下我在这里做错了什么吗?我刚刚编辑了带有错误的问题详细信息。您对input 的代码的 sn-p 将在此处特别提供帮助。谢谢。
    【解决方案2】:

    由于从输入开始的前几层发生了变化,因此无法使用预训练的权重。因此,可以直接从这里获取架构并进行相应的修改,而不是尝试复杂的手术。

    https://github.com/keras-team/keras-applications/blob/master/keras_applications/inception_v3.py

    【讨论】:

    • 非常正确。但是,这无助于加载重量。必须有一种方法可以对所有其他层使用权重,并且仍然不使用初始 k 层。
    • 后续层的权重可能不相关,因为初始层的输出(特征图)已经完全改变。即使必须这样做,也可以遍历层(model.layers)并获取/设置权重(layer.get_weights/layer.set_weights)。
    猜你喜欢
    • 1970-01-01
    • 2018-07-31
    • 2018-12-11
    • 2017-07-07
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多