在加载保存的Keras序列模型时,我的测试数据在开始时提供的精度较低

时间:2017-03-02 09:35:44

标签: python-2.7 tensorflow neural-network keras

我正在创建一个简单的顺序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次测试提供的结果不准确,其余测试非常准确)

1 个答案:

答案 0 :(得分:1)

您的问题似乎来自于丢失细胞的隐藏状态。在模型构建期间,它们可能会被重置,这可能会导致问题。

所以(这有点麻烦),但你可以保存并加载你网络的states

  1. 如何保存? (假设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)
    
  2. 现在,当您可以重新加载隐藏状态here时,您可以阅读如何在图层中设置隐藏状态。

  3. 当然 - 最好将所有这些方法打包在某种物体中,例如类构造函数方法。