Python 3.x 使用Keras和TensorFlow后端的可再现结果
我正在使用Keras构建一个深入学习的LSTM模型,使用TensorFlow后端。每次运行模型时,结果都不同。有没有办法修复种子以产生可重复的结果?谢谢大家! 与深度学习相关的固有随机性会导致不可再现的结果,但你可以在一定程度上控制它 由于我们使用的是深度神经网络,我们可以有不同的随机性影响我们的再现性,导致不同的结果,例如Python 3.x 使用Keras和TensorFlow后端的可再现结果,python-3.x,tensorflow,keras,random-seed,Python 3.x,Tensorflow,Keras,Random Seed,我正在使用Keras构建一个深入学习的LSTM模型,使用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)