我正在研究一个序列,使用在Keras中使用LSTM层的编码器解码器架构来对文本生成进行序列排序。
我的代码是Keras seq2seq教程:seq2seq/的修改版本。
在对模型进行训练之后,我想建立一个推理模式,在这种模式下,我可以只使用所接受模型的隐藏状态来解码序列,而无需每次对整个模型进行再训练。我正在寻找一种方法将这些隐藏的LSTM状态保存到一个文件中,然后重新加载它们来建立我的推理模型。
模型培训部分的一部分如下所示:
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)稍后,我将需要隐藏的单元格状态和编码器输出(encoder_outputs、state_h和state_c)以同样的方式建立推理模型(如本教程):
encoder_model = Model(inputs=encoder_inputs,outputs=[encoder_outputs, state_h, state_c])当有一个程序的时候重用变量很好,但是我想把我的代码分成训练和推理。然后,我需要找到一种将隐藏的单元格状态保存到文件中的方法。
到目前为止我尝试的是
from tensorflow.keras.models import load_model
model.save("current_model.h5")
newmodel = load_model('./current_model.h5', custom_objects={'AttentionLayer': AttentionLayer})
encoder_outputs_2, state_h_2, state_c_2 = newmodel.layers[7].output以这种方式重新分配变量确实有效,但没有将它们输入推理模型:这给了我错误信息。
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1_2:0", shape=(?, 30), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []任何帮助,我已经尝试了到目前为止,或想法的新方法,将不胜感激。干杯!
发布于 2019-08-30 14:42:07
解决了这个问题:由于引用了堆叠的LSTM层的不正确实例而发生的图断开错误,应该是新模型。
https://stackoverflow.com/questions/57611085
复制相似问题