繁体   English   中英

(tf.)keras 加载保存的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM