可重现结果的种子不起作用(Tensorflow)

Seed for reproducible results is not working (Tensorflow)

我遇到了一个问题,涉及使用 Tensorflow (v1.15.3) 结果的可重复性。我设置了所有种子(os、随机、numpy 和 tensorflow),但卷积神经网络的结果总是在执行之间发生变化(即使相似)。

我是这样设置种子的:

seed_value = 1234

import os
os.environ['PYTHONHASHSEED'] = str(seed_value)
import random
random.seed(seed_value)
import numpy as np
np.random.seed(seed_value)
import tensorflow as tf
tf.compat.v1.set_random_seed(seed_value)
tf.set_random_seed(seed_value)

接下来我这样定义网络的权重:

weights = {
    'conv1/conv2d': tf.get_variable('conv1/weights', shape=[3,3,512,1024], initializer=tf.contrib.layers.xavier_initializer()),
    # and more ...
}

(无论我是否使用权重初始化器,情况都不会改变)

之后,我使用之前初始化的权重定义了带有卷积运算的图(我省略了这一点,因为无法将种子设置为 Tensorflow 中的 tf.nn.conv2d 操作,并且因为只有权重是可能影响结果的模型动态部分)。

知道如何使用 Tensorflow 以这种方式定义模型后始终获得相同的结果吗?

谢谢。

我建议,之后

weights = {
    'conv1/conv2d': tf.get_variable('conv1/weights', shape=[3,3,512,1024], initializer=tf.contrib.layers.xavier_initializer()),
    # and more ...
}

例如,将权重外部存储在一个文件中,然后下次您运行,不要通过上一行并从外部文件加载权重。