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

Why does my keras neural network model output different values on a different machine?

我正在使用 aws ec2 为多标签分类任务训练模型。训练后,我在同一台机器上测试了模型,结果很好(准确率达到 90+%)。然而,在我将保存的模型导入到我的本地机器(没有 GPU)后,它给出了不同的结果(准确率低于 5%)。关于为什么会发生这种情况的任何建议?谢谢。

TL;DR:Keras/tensorflow 模型从 GPU[=19] 传输时产生不同的结果=]机器到CPU.

在网上搜索后,我发现了问题。当在 GPU 上 运行ning 时,似乎 keras over tensorflow 往往会产生在传输到非 GPU 机器时无法重现的结果。这很可能与安装的 cuDNN 有关。 cuDNN 的最大池化和一些反向卷积算法是不确定的 - 正如论坛所说。

我发现的解决方案是在调用任何 keras 库之前使用 numpy.random.seed(seed_no)。当您 运行 在 CPU 上输入代码 时,此方法有效。适用于 keras/theanokeras/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 上以 tensorflow 作为后端 运行ning 在 GPU 上产生统一结果的明确说明。