转移学习中的问题-无法使用keras转移权重

时间:2019-04-30 14:33:09

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

我使用监督学习对网络进行了训练并保存了权重,现在我创建了一个具有附加层的新网络(新网络包含旧网络的相同层并具有附加层),我需要将所有旧网络权重转移到新网络,并让新的其他层随机初始化,但是当我使用新的权重时,它将进行随机预测(权重是随机初始化的)。磁盘中旧网络的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("========================================")

两个网络的示意图: this photo describes the relation between the old and new network

1 个答案:

答案 0 :(得分:0)

今天早些时候我有同样的问题,但是找不到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)