【问题标题】:Problem in transfer learning - couldn't transfer weights using keras迁移学习中的问题 - 无法使用 keras 迁移权重
【发布时间】:2019-09-19 05:59:49
【问题描述】:

我使用监督学习训练了网络并保存了它的权重,现在我创建了一个带有附加层的新网络(新网络包含旧网络的相同层并有附加层),我需要将所有旧网络权重转移到新网络并随机初始化新的附加层,但是当我使用新权重时,它需要随机预测(权重是随机初始化的)。旧网络的 weights.h5 与磁盘中新网络的 weights.h5 大小不同。

from keras import layers, models, optimizers
from keras import backend as K
import numpy as np
from keras.models import Model, load_model



import keras.losses

model = load_model("nvidia_41_named.h5") #the old network
model.load_weights("nvidia_41_named_weights.h5") # the old weights

actor=load_model("actormodel.h5") #the new network

for layer in model.layers : 
    name = layer.name

    for lay in actor.layers : 
        if lay.name == name:
            print(lay.name)
            weights = model.get_layer(name).get_weights()
            actor.get_layer(name).set_weights(weights)
            print(lay.name,'correctly transferred')
            print("========================================")

两个网络的示意图:

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    我今天早些时候也有同样的问题,但再也找不到 stackoverflow 的答案了。 如果您在旧模型中命名图层,则使用 model.load_weights("./weights_cnn.hdf5", by_name=True) (标志“by_name”很重要!) 它应该为命名层加载正确的权重。

    cnn1 = tf.keras.layers.Conv2D(filters, kernel, padding="same", activation='relu', name='conv_1_j')(inp_layer)

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2021-08-16
      • 2021-02-01
      相关资源
      最近更新 更多