Python 为什么TensorFlow 2和1的RNG不同? 将numpy导入为np np.随机种子(1) 随机输入 随机种子(2) 导入tensorflow作为tf tf.compat.v1.set_random_seed(3)#图级seed 如果tf.\uuuuu版本\uuuuu[0]=“2”: tf.random.set_seed(4)#全局seed 其他: tf.set_random_seed(4)#全局seed 从tensorflow.keras.initializers导入glorot_uniform作为GlorotUniform 从tensorflow.keras导入后端为K init=GlorotUniform(种子=5)(形状=(4,4)) 打印(K.eval(初始)) [[-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

Python 为什么TensorFlow 2和1的RNG不同? 将numpy导入为np np.随机种子(1) 随机输入 随机种子(2) 导入tensorflow作为tf tf.compat.v1.set_random_seed(3)#图级seed 如果tf.\uuuuu版本\uuuuu[0]=“2”: tf.random.set_seed(4)#全局seed 其他: tf.set_random_seed(4)#全局seed 从tensorflow.keras.initializers导入glorot_uniform作为GlorotUniform 从tensorflow.keras导入后端为K init=GlorotUniform(种子=5)(形状=(4,4)) 打印(K.eval(初始)) [[-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,python,tensorflow,keras,tensorflow2.0,reproducible-research,Python,Tensorflow,Keras,Tensorflow2.0,Reproducible Research,为什么不同?这在两个版本之间造成了严重的再现性问题——在同一版本的(TF2)图与Earge图中,这或其他问题。更重要的是,TF1的RNG序列是否可以在TF2中使用?有足够的挖掘-是。TL;博士: TF2 TF1中的行为:来自tensorflow.python.keras.initializers将GlorotUniformV2导入为GlorotUniform TF2中的TF1行为:来自tensorflow.python.keras.initializers导入GlorotUniform TF

为什么不同?这在两个版本之间造成了严重的再现性问题——在同一版本的(TF2)图与Earge图中,这或其他问题。更重要的是,TF1的RNG序列是否可以在TF2中使用?

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

  • TF2 TF1中的行为:
    来自tensorflow.python.keras.initializers将GlorotUniformV2导入为GlorotUniform
  • TF2中的TF1行为:
    来自tensorflow.python.keras.initializers导入GlorotUniform
TF2基本上执行引擎盖下的第一个项目符号
GlorotUniform
实际上是
glorotuniformormv2


一些细节

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

tensorflow.python.ops.gen\u random\u ops.trunched\u normal
从截断正态分布输出随机值

生成的值遵循平均值为0和0的正态分布 标准偏差1,但幅值大于 从平均值中剔除2个以上的标准偏差并重新选取


tensorflow.python.ops.gen\u stateless\u random\u ops.truncated\u normal
从截断正态分布输出确定性伪随机值

生成的值遵循平均值为0和0的正态分布 标准偏差1,但幅值大于 从平均值中剔除2个以上的标准偏差并重新选取

输出是
形状
种子
的确定函数

第一个和第二个最终分别是
GlorotUniform
glorotuniformormv2
路由到的位置。来自tensorflow.keras.initializers的TF2
init_ops_v2
(即
v2
)导入,而TF1来自
init_ops