TensorFlow - 使用dropout时重现结果

时间:2018-03-08 14:37:27

标签: python-3.x tensorflow deterministic regularized reproducible-research

我正在使用丢失正则化训练神经网络。我保存网络初始化的权重和偏差,以便在我获得良好结果时可以重复实验。

但是,使用丢失会在网络中引入一些随机性:由于丢失会随机丢弃单位,每次重新运行网络时,都会丢弃不同的单元 - 即使我使用完全相同的权重和偏差初始化网络(如果我理解正确的。)

有没有办法让辍学确定?

1 个答案:

答案 0 :(得分:1)

在tensorflow中执行dropout有两种主要方法:

两个函数都接受用于生成随机掩码的seed参数。默认情况下,seed=None,表示随机种子,即非确定性。为了使结果具有确定性,您可以在每个操作级别上设置种子,或者调用tf.set_random_seed(设置图级随机种子),或者更好,两者。

示例:

import tensorflow as tf

tf.InteractiveSession()
tf.set_random_seed(0)

x = tf.ones([10])
y = tf.nn.dropout(x, keep_prob=0.5, seed=0)
for i in range(5):
  print(y.eval())

z = tf.layers.dropout(inputs=x, rate=0.5, training=True, seed=0)
for i in range(5):
  print(z.eval())

警告:一般来说,训练脚本中还有其他随机源,因此您还必须设置纯python种子(random.seed)和numpy种子(numpy.random.seed)。