【问题标题】:How to load the weights of the first few layers of Convolutional Neural Network in Keras and delete the pre-trained model?如何在 Keras 中加载卷积神经网络前几层的权重并删除预训练的模型?
【发布时间】:2020-08-19 11:15:00
【问题描述】:

我有一个在 Keras 中训练的预训练模型。

我正在尝试在另一个任务中使用该模型,但我不需要所有层,只需要前 4 个卷积层。

我将模型保存在“keras_pretrained_model.h5”中

是否可以使用“.h5”文件中预训练模型的前 4 个卷积层的权重来初始化新模型的前 4 个卷积层?

是否总是需要首先加载整个预训练模型??

预训练模型实际上占用了大量空间,我不确定在使用权重初始化新模型后如何删除预训练模型。据我了解,使用tf.keras.backend.clear_session() 将清除与旧模型一起创建的新模型。

所以,我的问题是

  1. 有没有办法在不加载整个预训练模型的情况下初始化新模型层中的权重?
  2. 如果我必须加载整个预训练模型,如何只删除预训练模型而不以任何方式损害新模型?

【问题讨论】:

    标签: python tensorflow keras neural-network tf.keras


    【解决方案1】:

    我想到了两个过程

    1. 如果新模型前4层的层名与预训练模型中的4层相同,则 new_model.load_weights(path_to_old_model_file, by_name = True)

    2. 如果名称不是数学,那么我们可以通过从旧模型 h5 文件中的相应层获取权重并使用 set_weights() 方法设置权重来进行逐层权重初始化。 我写了一段代码,已经上传到github,here

    如果有人看到此问题提供反馈,我将不胜感激!

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2014-09-05
      • 1970-01-01
      • 2020-09-10
      相关资源
      最近更新 更多