为什么我的keras神经网络模型在不同的机器上输出不同的值?

时间:2017-02-24 22:53:15

标签: amazon-ec2 keras recurrent-neural-network

我正在使用aws ec2来训练多标签分类任务的模型。训练结束后,我在同一台机器上测试了模型,这给了我很好的结果(准确度为90 +%)。但是,在将保存的模型导入我的本地计算机(无GPU)后,它会产生不同的结果(精度小于5%)。有关为什么会发生这种情况的任何建议?感谢。

TL; DR: Keras / tensorflow 模型在从>机器转移到 时会产生不同的结果。

1 个答案:

答案 0 :(得分:3)

搜索网后,我发现了问题。在GPU上运行时,似乎超过张量流的keras往往会产生在转移到非GPU机器时无法再现的结果。这很可能与安装的cuDNN有关。 cuDNN的maxpooling和一些卷积后向算法是非确定性的 - 正如论坛所说。

我发现的解决方案在调用任何keras库之前说正确使用numpy.random.seed(seed_no)。当您在CPU 上运行代码时,此方法有效。适用于 keras / theano keras / tensorflow

GPU用户使用针对theano的keras的解决方案涉及modifying the .theanorc file into

[dnn.conv]
algo_bwd_filter = deterministic
algo_bwd_data = deterministic

using theano flagsTHEANO_FLAGS="dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic" python rnn_model.py

但是,我还没有找到任何明确的指示,说明如何在具有张量流的keras上生成统一结果作为GPU上的后端运行。