【问题标题】:Why is RNG different for TensorFlow 2 and 1?为什么 TensorFlow 2 和 1 的 RNG 不同?
【发布时间】:2020-09-09 14:58:34
【问题描述】:
import numpy as np
np.random.seed(1)
import random
random.seed(2)
import tensorflow as tf
tf.compat.v1.set_random_seed(3)  # graph-level seed
if tf.__version__[0] == '2':
    tf.random.set_seed(4)  # global seed
else:
    tf.set_random_seed(4)  # global seed

from tensorflow.keras.initializers import glorot_uniform as GlorotUniform
from tensorflow.keras import backend as K

init = GlorotUniform(seed=5)(shape=(4, 4))
print(K.eval(init))
[[-0.75889236  0.5744677   0.82025963 -0.26889956]
 [ 0.0180248  -0.24747121 -0.0666492   0.23440498]
 [ 0.61886185  0.05548459  0.39713246  0.126324  ]
 [ 0.6639387  -0.58397514  0.39671892  0.67872125]]  # TF 2

[[ 0.2515846  -0.41902617 -0.7859829   0.41573995]
 [ 0.8099498  -0.6861247  -0.46198446 -0.7579694 ]
 [ 0.29976922  0.0310365   0.5031274   0.314076  ]
 [-0.62062943 -0.01889879  0.7725797  -0.65635633]]  # TF 1

为什么不一样?这在两个版本之间造成了严重的可重复性问题 - 在相同版本的 (TF2) Graph 与 Eager 中,这个或其他东西。更重要的是,TF1的RNG序列可以用在TF2中吗?

【问题讨论】:

    标签: python tensorflow keras tensorflow2.0 reproducible-research


    【解决方案1】:

    有足够的挖掘 - 是的。 TL;DR:

    • TF1 中的 TF2 行为:from tensorflow.python.keras.initializers import GlorotUniformV2 as GlorotUniform
    • TF2 中的 TF1 行为:from tensorflow.python.keras.initializers import GlorotUniform

    TF2 本质上执行了引擎盖下的第一个子弹; GlorotUniform其实就是GlorotUniformV2


    一些细节

    找到文档 - 但代码本身在某些 pywrapped 编译代码处终止(TF1 -- TF2 -- 出于某种原因,Github 拒绝显示 TF2 的 gen_stateless_random_ops 和 TF1 的 gen_random_ops,但你可以找到两者在本地安装中):

    tensorflow.python.ops.gen_random_ops.truncated_normal 从截断的正态分布中输出随机值。

    生成的值服从均值为 0 的正态分布,并且 标准差 1,但幅度更大的值除外 超过平均值的 2 个标准差被删除并重新选择。


    tensorflow.python.ops.gen_stateless_random_ops.truncated_normal 从截断的正态分布中输出确定性伪随机值。

    生成的值服从均值为 0 的正态分布,并且 标准差 1,但幅度更大的值除外 超过平均值的 2 个标准差被删除并重新选择。

    输出是shapeseed 的确定性函数。

    第一个和第二个最终分别是 GlorotUniformGlorotUniformV2 路由到的位置。 TF2 的 from tensorflow.keras.initializersinit_ops_v2 导入(即V2),而 TF1 从 init_ops 导入。

    【讨论】:

      猜你喜欢
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 2016-05-31
      • 2014-03-19
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多