如何在Keras中加载卷积神经网络的前几层权重并删除预训练模型?

问题描述

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

我正在尝试在另一项任务中使用该模型,但是我不需要所有的层,而只需要前4个转换层。

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

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

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

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

所以我的问题是

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

解决方法

我想到了两个过程

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

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

如果能看到有人对此给出反馈,我将非常感激!