使用带有TensorFlow后端的Keras重现结果

Eda*_*ame 8 python-3.x random-seed keras tensorflow

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

Cha*_*mot 5

正如@Poete_Maudit在这里所说:如何在keras中获得可复制的结果

为了获得可重现的结果,您必须在脚本的开始处执行以下操作(这将被迫使用单个CPU):

# Seed value (can actually be different for each attribution step)
seed_value= 0

# 1. Set `PYTHONHASHSEED` environment variable at a fixed value
import os
os.environ['PYTHONHASHSEED']=str(seed_value)

# 2. Set `python` built-in pseudo-random generator at a fixed value
import random
random.seed(seed_value)

# 3. Set `numpy` pseudo-random generator at a fixed value
import numpy as np
np.random.seed(seed_value)

# 4. Set `tensorflow` pseudo-random generator at a fixed value
import tensorflow as tf
tf.set_random_seed(seed_value)

# 5. Configure a new global `tensorflow` session
from keras import backend as K
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
K.set_session(sess)
Run Code Online (Sandbox Code Playgroud)

注意:您无法(再)使用命令:获得可复制的结果PYTHONHASHSEED=0 python3 script.py,因为https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development可能让您思考一下,您必须像在步骤1中那样在脚本中使用os.environ设置PYTHONHASHSEED。另外,这不适用于GPU使用。

  • 对于 Tensorflow 2.0,“tf.random.set_random_seed(seed_value)”更改为“tf.random.set_seed(seed_value)” (2认同)

cod*_*ord 3

深度学习存在固有的随机性,导致结果不可重现,但你可以在一定程度上控制它。

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

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

  • 正则化中的随机性,例如 dropout。

  • 层中的随机性。

  • 优化中的随机性。

但有多种方法可以缓解这一问题,其中一个选项是使用汇总统计数据。另一种提供更多可重现结果的方法是使用带有 numpy 和/或 tensorflow 的随机种子,请参阅:

https://docs.scipy.org/doc/numpy-1.12.0/reference/ generated/numpy.random.seed.html

https://www.tensorflow.org/api_docs/python/tf/set_random_seed

对于使用GPU 的方法,我们可以指定它使用确定性方法而不是默认的非确定性方法。对于 nvidia 显卡,请参阅:docs.nvidia.com/cuda