在Tensorflow中,要实现训练结果的100%可重复性,必须设置哪些种子?[duplicate]

sirbozc5  于 2022-11-16  发布在  其他
关注(0)|答案(4)|浏览(138)

此问题在此处已有答案

TensorFlow: Non-repeatable results(5个答案)
19天前关闭。
在一般的tensorflow 设置中,如

model = construct_model()
with tf.Session() as sess:
    train_model(sess)

其中construct_model()包含包括权重(tf.truncated_normal)的随机初始化的模型定义,并且train_model(sess)执行模型的训练-
我必须在何处设置哪些种子以确保重复运行上述代码片段之间的100%可重复性?The documentation for tf.random.set_random_seed可能很简洁,但让我有点困惑。我尝试了:

tf.set_random_seed(1234)
model = construct_model()
    with tf.Session() as sess:
        train_model(sess)

但每次都得到不同的结果。

lmyy7pcs

lmyy7pcs1#

到目前为止,使用GPU的最佳解决方案是安装tensorflow 决定论,如下所示:

pip install tensorflow-determinism

然后在代码中包含以下代码

import tensorflow as tf
import os
os.environ['TF_DETERMINISTIC_OPS'] = '1'

来源:https://github.com/NVIDIA/tensorflow-determinism

brccelvz

brccelvz2#

一个可能的原因是,在构建模型时,有些代码使用了numpy.random模块,所以也许你也可以尝试为numpy设置种子。

cvxl0en2

cvxl0en23#

对我有效的方法是在this answer之后进行一些修改:

import tensorflow as tf
import numpy as np
import random

# Setting seed value
# from https://stackoverflow.com/a/52897216
# generated randomly by running `random.randint(0, 100)` once
SEED = 75
# 1. Set the `PYTHONHASHSEED` environment variable at a fixed value
os.environ['PYTHONHASHSEED'] = str(SEED)
# 2. Set the `python` built-in pseudo-random generator at a fixed value
random.seed(SEED)
# 3. Set the `numpy` pseudo-random generator at a fixed value
np.random.seed(SEED)
# 4. Set the `tensorflow` pseudo-random generator at a fixed value
tf.random.set_seed(SEED)

我不知道如何设置session seed(步骤5),但似乎没有必要。
我在一个高RAM TPU上运行Google Colab Pro,我的训练结果(损失函数的图形)在使用这种方法的连续三次中完全相同。

roqulrg3

roqulrg34#

SEED = 42
import os
import random

os.environ["TF_DETERMINISTIC_OPS"] = "1"
keras.utils.set_random_seed(SEED)
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.random.set_seed(SEED)

相关问题