首页 文章

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

提问于
浏览
1

我正在创建一个简单的顺序Keras模型,它将在100个批次中获取10k个输入 . 每个输入有3列,相应的输出是该行的总和 .

顺序模型有2层-LSTM(Stateful = true),Dense .

现在,在编译和拟合模型之后,我将其保存在“model.h5”文件中 .

然后,我读取保存的模型,并使用测试数据(size = 10k,batch_size = 100)调用model.predict .

Problem: 对于前400-500个输入,预测不能正常工作,其余的预测在val_loss非常低的情况下工作得非常好 .

Case1: 我使LSTM层无状态(即Stateful = False)在这种情况下,Keras为所有测试数据提供非常准确的输出 .

Case2: 如果我直接在创建的模型上应用model.predict,而不是保存然后再次读取,所有输出都准确到位 .

但是,我需要Stateful = True,而且,我想保存我的模型,然后稍后恢复该模型的工作 .

1.有什么方法可以解决这个问题吗?

2.另外,当我提供测试数据时,模型的准确度如何提高? (因为前400-500次测试提供的结果不准确,其余测试非常准确)

1 回答

  • 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)
    
    • 现在,当您可以重新加载隐藏状态时,您可以阅读如何在图层中设置隐藏状态 .

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

相关问题