Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Python 3.x 使用Keras和TensorFlow后端的可再现结果_Python 3.x_Tensorflow_Keras_Random Seed - Fatal编程技术网

Python 3.x 使用Keras和TensorFlow后端的可再现结果

Python 3.x 使用Keras和TensorFlow后端的可再现结果,python-3.x,tensorflow,keras,random-seed,Python 3.x,Tensorflow,Keras,Random Seed,我正在使用Keras构建一个深入学习的LSTM模型,使用TensorFlow后端。每次运行模型时,结果都不同。有没有办法修复种子以产生可重复的结果?谢谢大家! 与深度学习相关的固有随机性会导致不可再现的结果,但你可以在一定程度上控制它 由于我们使用的是深度神经网络,我们可以有不同的随机性影响我们的再现性,导致不同的结果,例如 初始化中的随机性,例如权重 正则化中的随机性,如退出 分层随机性 优化中的随机性 但有几种方法可以缓解这种情况,其中一种方法是使用汇总统计数据。另一种可提供更多重复性结

我正在使用Keras构建一个深入学习的LSTM模型,使用TensorFlow后端。每次运行模型时,结果都不同。有没有办法修复种子以产生可重复的结果?谢谢大家!

与深度学习相关的固有随机性会导致不可再现的结果,但你可以在一定程度上控制它

由于我们使用的是深度神经网络,我们可以有不同的随机性影响我们的再现性,导致不同的结果,例如

  • 初始化中的随机性,例如权重

  • 正则化中的随机性,如退出

  • 分层随机性

  • 优化中的随机性

但有几种方法可以缓解这种情况,其中一种方法是使用汇总统计数据。另一种可提供更多重复性结果的方法是使用带有numpy和/或tensorflow的随机种子,请参见:


对于使用GPU的方法,我们可以指定它使用确定性方法,而不是默认的非确定性方法。对于nvidia图形卡,请参见:

,正如@Poete_Maudit在这里所说:

要获得可再现的结果,您必须在脚本开始时执行以下操作(这将强制使用单个CPU):


注意:您无法(再)使用命令获得可复制的结果:
pythonhasheed=0 python3 script.py
,这可能会让您想到,您必须在脚本中使用os.environ设置pythonhasheed,如步骤1所示。而且,这对GPU的使用不起作用

基本上,使结果可复制的关键思想是禁用GPU
。这是非常重要的。要做到这一点,只需包括

import os
import tensorflow as tf
import numpy as np
import random as rn

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""

sd = 1 # Here sd means seed.
np.random.seed(sd)
rn.seed(sd)
os.environ['PYTHONHASHSEED']=str(sd)

from keras import backend as K
config = tf.ConfigProto(intra_op_parallelism_threads=1,inter_op_parallelism_threads=1)
tf.set_random_seed(sd)
sess = tf.Session(graph=tf.get_default_graph(), config=config)
K.set_session(sess)

在代码的最开始部分。希望这能对您有所帮助。

请查看我在使用CPU时在此处的响应()。此代码片段不适用于我。我正在使用TensorFlow(1.14.0版)的Keras API(2.2.4-tf)在谷歌合作实验室进行深入学习。请建议TensorFlow 2.0
tf.random.set\u random\u seed(seed\u value)
更改为
tf.random.set\u seed(seed\u value)
import os
import tensorflow as tf
import numpy as np
import random as rn

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""

sd = 1 # Here sd means seed.
np.random.seed(sd)
rn.seed(sd)
os.environ['PYTHONHASHSEED']=str(sd)

from keras import backend as K
config = tf.ConfigProto(intra_op_parallelism_threads=1,inter_op_parallelism_threads=1)
tf.set_random_seed(sd)
sess = tf.Session(graph=tf.get_default_graph(), config=config)
K.set_session(sess)