Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 为什么我的keras神经网络模型在不同的机器上输出不同的值?_Amazon Ec2_Keras_Recurrent Neural Network - Fatal编程技术网

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

Amazon ec2 为什么我的keras神经网络模型在不同的机器上输出不同的值?,amazon-ec2,keras,recurrent-neural-network,Amazon Ec2,Keras,Recurrent Neural Network,我正在使用AWSEC2为多标签分类任务训练模型。培训后,我在同一台机器上测试了模型,结果很好(准确率为90+)。但是,在我将保存的模型导入本地机器(没有GPU)后,它会给出不同的结果(精度低于5%)。关于为什么会发生这种情况有什么建议吗?谢谢 TL;DR:Keras/tensorflow模型从GPU机器传输到CPU时产生不同的结果在搜索网络时,我发现了问题。在GPU上运行时,keras over tensorflow似乎会产生在传输到非GPU机器时不可复制的结果。这很可能与安装的cuDNN有关。

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


TL;DR:Keras/tensorflow模型从GPU机器传输到CPU时产生不同的结果在搜索网络时,我发现了问题。在GPU上运行时,keras over tensorflow似乎会产生在传输到非GPU机器时不可复制的结果。这很可能与安装的cuDNN有关。cuDNN的maxpooling和一些卷积向后算法是不确定的——正如论坛上所说的那样

我找到的解决方案是在调用任何keras库之前使用
numpy.random.seed(seed\u no)
。当您在CPU上运行代码时,此功能将起作用。适用于keras/theano和keras/tensorflow

GPU用户的解决方案在theano上使用keras包括:

或者:
THEANO_FLAGS=“dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic”python rnn_model.py


然而,我还没有找到任何关于如何使用tensorflow作为后端在GPU上运行的keras生成统一结果的明确说明

所以,你用什么数据来训练你的模型,这取决于如何编程,我用的是文本数据(tweets)。我根据它们表达的情绪(喜悦、悲伤、愤怒等)对它们进行分类。我在tensorflow上使用keras。我的网络是一个顺序模型(嵌入层->双向LSTM->S形密集层)。我使用二进制交叉熵(因为我希望有多个0/1情感输出)和rmsprop作为优化工具。它在aws中运行得很好,但在我的本地机器中却不行。我已经将本地机器上的keras和tensorflow版本更改为aws中的版本。现在唯一的区别是我在笔记本电脑上使用的是CPU版本,而aws ec2使用的是gpu。然而,与aws相比,我的本地机器中的输出仍然倾向于提供非常不同的输出。您应该提供代码以及您得到的结果,否则问题完全无法回答。Sir@MatiasValdenegro,我的代码基于Alexander Rakhlin爵士发布的这篇文章。我将其修改为使用RNN来代替多重情感输出。我在aws ec2机器上获得了90%以上的准确率,而在没有GPU的笔记本电脑上只有5%的准确率。我对这种行为进行了一些搜索,发现原因是GPU机器上使用的cuDNN产生了不确定值,从而使模型随机化。我发布了我找到的解决方案和一些链接。嗨,谢谢你的回答!numpy.random.seed的参数seed_no是什么?你知道为什么打电话会让cuDNN变得不确定吗?谢谢Sir@Pusheen_the_dev,seed_no是一个整数变量,用于控制numpy的随机状态,使结果可预测。您可以查看更多信息。据我所知,keras使用numpy将模型的初始权重随机化。因此,设置种子以控制此随机状态将使模型的输出产生统一的实验结果。但是,种子设定不会阻止cuDNN的非确定性,因为它是安装时的默认设置。您可以对此使用无标志。
[dnn.conv]
algo_bwd_filter = deterministic
algo_bwd_data = deterministic