![](/img/trans.png)
[英]How to load a trained model's weights, which were saved with tf.keras.models.save_model?
[英](tf.)keras loading saved model weights with trainable word embeddings
我在(tf.)Keras 中加载 model 权重时遇到问题。
我的 model 只是一个简单的 LSTM model,带有预训练的词嵌入,但我让词嵌入在训练时可以训练。
我使用以下代码保存了 model 权重:
mc = ModelCheckpoint(filepath, save_weights_only=True, monitor='val_accuracy', mode='max', verbose=1, save_best_only=True)
我检查了文件路径中是否存在 hdf5 文件,大小约为 18MB。
后来,我尝试使用以下代码加载权重:
model = build_model() #the function that I used to make the model in Training process
model = model.load_weights(filepath)
但是, model.load_weights(filepath) 返回 None
问题1。 这些代码有问题吗? 如果不是,这可能是因为我将词嵌入留为可训练的吗?
问题2。 = 在这种情况下,修改后的词嵌入保存在哪里? 是和hdf5文件中的其他参数一起保存的吗? 如果是这种情况,我该如何加载这个微调的词嵌入?
要提取词嵌入,您需要首先从所需的 model 中提取嵌入层
embed_layer = model.get_layer('embedding_26') #embedding_26 is generated name of embedding layer
提取训练好的词嵌入
embed_layer.get_weights()
>>> [array([[ 9.0566e-01, -7.1792e-01, -1.9574e-01, ..., 1.1230e-03,
2.8188e-02, 3.0385e-01],
[ 5.8560e-01, -3.6964e-01, 6.3480e-02, ..., 5.6656e-01,
-3.6404e-01, -2.5202e-01],
[ 4.5269e-01, -6.2509e-01, 1.6866e-01, ..., -5.0146e-01,
2.9764e-01, 1.4548e-01],
...,
[-1.0632e-01, 6.8057e-01, -1.5388e+00, ..., -4.8493e-01,
3.2478e-01, -1.1330e-01],
[ 7.6822e-01, 7.1786e-01, 5.8778e-01, ..., 1.6097e-01,
8.9411e-02, 8.4237e-01],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00,
0.0000e+00, 0.0000e+00]], dtype=float32)]
我不确定您是否可以直接从文件中加载权重,但您可以执行以下操作:
model = load_model('best_model.h5')
weights = model.get_weights() # load weights of a model
然后,您可以使用在相同架构的另一个 model 中加载它
model2.set_weights(weights)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.