代码之家  ›  专栏  ›  技术社区  ›  rdv

TensorFlow-使用dropout时再现结果

  •  3
  • rdv  · 技术社区  · 6 年前

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

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

    有没有办法让辍学者确定下来?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Maxim    6 年前

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

    两个函数都接受 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 )。