我正在创建一个简单的顺序Keras模型,它将在100个批次中获取10k个输入。每个输入有3列,相应的输出是该行的总和。
顺序模型有2层 - LSTM(Stateful = true),Dense。
现在,在编译和拟合模型之后,我将其保存在&model; .h.h'文件。
然后,我读取保存的模型,并使用测试数据(size = 10k,batch_size = 100)调用model.predict。
问题:对于前400-500个输入,预测无法正常工作,其余的工作完全正常,而且val_loss非常低。
案例1:我使LSTM层无状态(即Stateful = False) 在这种情况下,Keras为所有测试数据提供非常准确的输出。
案例2:如果我直接在创建的模型上应用model.predict,而不是保存然后重新读取,所有输出都准确无误。
但是,我需要Stateful = True,而且,我想保存我的模型,然后稍后恢复该模型的工作。
1.有什么方法可以解决这个问题吗?
2.此外,当我提供测试数据时,模型的准确度如何提高? (因为前400-500次测试提供的结果不准确,其余测试非常准确)
答案 0 :(得分:1)
您的问题似乎来自于丢失细胞的隐藏状态。在模型构建期间,它们可能会被重置,这可能会导致问题。
所以(这有点麻烦),但你可以保存并加载你网络的states
:
如何保存? (假设i-th
图层是recurrent
图层):
hidden_state = model.layers[i].states[0].eval()
cell_state = model.layers[i].states[0].eval()
numpy.save("some name", hidden_state)
numpy.save("some other name", cell_state)
现在,当您可以重新加载隐藏状态here时,您可以阅读如何在图层中设置隐藏状态。
当然 - 最好将所有这些方法打包在某种物体中,例如类构造函数方法。