将最后一层(输出层)的权重从训练网络加载到新模型

2024-09-29 21:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以使用set_weights和get_weights方案从训练网络将权重加载到新模型的最后一层? 关键是,我将每一层的权重保存为mat文件(训练后),以便在Matlab中进行一些计算,我只希望最后一层的修改权重加载到新模型的最后一层,其他层获得与训练模型相同的权重。因为保存的格式是mat,所以这有点棘手

weights1 = lstm_model1.layers[0].get_weights()[0]
biases1 = lstm_model1.layers[0].get_weights()[1]
weights2 = lstm_model1.layers[2].get_weights()[0]
biases2 = lstm_model1.layers[2].get_weights()[1]
weights3 = lstm_model1.layers[4].get_weights()[0]
biases3 = lstm_model1.layers[4].get_weights()[1]
# Save the weights and biases for adaptation algorithm 
savemat("weights1.mat", mdict={'weights1': weights1})  
savemat("biases1.mat", mdict={'biases1': biases1})      
savemat("weights2.mat", mdict={'weights2': weights2})   
savemat("biases2.mat", mdict={'biases2': biases2})      
savemat("weights3.mat", mdict={'weights3': weights3}) 
savemat("biases3.mat", mdict={'biases3': biases3})  

如何将其他层的旧权重加载到新模型(没有最后一层),将最后一层的修改权重加载到新模型的最后一层


Tags: 模型getlayers权重lstmmodel1weightsmat
1条回答
网友
1楼 · 发布于 2024-09-29 21:28:14

如果将其保存为.h5文件格式,则此操作有效。但是,我不确定。mat:

简单地说,您只需在所需的层上调用get_weights,类似地,在另一个模型的相应层上调用set_weights

last_layer_weights = old_model.layers[-1].get_weights()
new_model.layers[-1].set_weights(last_layer_weights)

有关更完整的代码示例,请参见:

# Create an arbitrary model with some weights, for example
model = Sequential(layers = [
    Dense(70, input_shape = (100,)),
    Dense(60),
    Dense(50),
    Dense(5)])

# Save the weights of the model
model.save_weights(“model.h5”)

# Later, load in the model (we only really need the layer in question)
old_model = Sequential(layers = [
    Dense(70, input_shape = (100,)),
    Dense(60),
    Dense(50),
    Dense(5)])

old_model.load_weights(“model.h5”)

# Create a new model with slightly different architecture (except for the layer in question, at least)
new_model = Sequential(layers = [
    Dense(80, input_shape = (100,)),
    Dense(60),
    Dense(50),
    Dense(5)])

# Set the weights of the final layer of the new model to the weights of the final layer of the old model, but leaving other layers unchanged.
new_model.layers[-1].set_weights(old_model.layers[-1].get_weights())

# Assert that the weights of the final layer is the same, but other are not.
print (np.all(new_model.layers[-1].get_weights()[0] == old_model.layers[-1].get_weights()[0]))
>> True

print (np.all(new_model.layers[-2].get_weights()[0] == old_model.layers[-2].get_weights()[0]))
>> False

相关问题 更多 >

    热门问题