我正在使用丢失正则化训练神经网络。我保存网络初始化的权重和偏差,以便在我获得良好结果时可以重复实验。
但是,使用丢失会在网络中引入一些随机性:由于丢失会随机丢弃单位,每次重新运行网络时,都会丢弃不同的单元 - 即使我使用完全相同的权重和偏差初始化网络(如果我理解正确的。)
有没有办法让辍学确定?
答案 0 :(得分:1)
在tensorflow中执行dropout有两种主要方法:
tf.nn.dropout
(低级别)tf.layers.dropout
(高级别,在引擎盖下使用tf.nn.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
)。