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