问题描述
我遇到了一个问题,与使用 Tensorflow (v1.15.3) 的结果的可重复性有关。我设置了所有种子(os、random、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 ...
}
例如,将重量外部存储在文件中,然后下次运行时,不要通过前一行并从外部文件加载重量。