Tensorflow:tf.random_normal 使用相同的初始种子得到不同的结果
Tensorflow: tf.random_normal get different results with the same initial seed
我想制作一个可重复使用的 RANDOM TENSOR x
并将相同的张量分配给 VARIABLE y
。这意味着它们在 Session.run()
.
期间应该具有相同的值
但事实并非如此。那么为什么 y
不等于 x
?
更新:
在连续多次应用 sess.run(x)
和 sess.run(y)
后,确认 x
每次都在变化,而 y
保持稳定。为什么?
import tensorflow as tf
x = tf.random_normal([3], seed = 1)
y = tf.Variable(initial_value = x) # expect y get the same random tensor as x
diff = tf.subtract(x, y)
avg = tf.reduce_mean(diff)
sess = tf.InteractiveSession()
sess.run(y.initializer)
print('x0:', sess.run(x))
print('y0:', sess.run(y))
print('x1:', sess.run(x))
print('y1:', sess.run(y))
print('x2:', sess.run(x))
print('y2:', sess.run(y))
print('diff:', sess.run(diff))
print('avg:', sess.run(avg)) # expected as 0.0
sess.close()
输出:TENSOR x 每 sess.run(x)
变化一次
x0: [ 0.55171245 -0.13107552 -0.04481386]
y0: [-0.8113182 1.4845988 0.06532937]
x1: [-0.67590594 0.28665832 0.3215887 ]
y1: [-0.8113182 1.4845988 0.06532937]
x2: [1.2409041 0.44875884 0.33140722]
y2: [-0.8113182 1.4845988 0.06532937]
diff: [ 1.2404865 -1.4525002 0.05412297]
avg: -0.04116
真正的原因是:
x = tf.random_normal(seed = initial_seed)
每次应用 sess.run()
时都会进化,但如果 重新启动 运行 会生成相同的张量序列 x0-x1-x2
。 Here 对 随机种子 提供了一些解释。
为了保证在每个第一个 运行 之后都是相同的 x
,我们需要 重新初始化 它。不确定我的情况是否有合适的方法。但是我们可以将 x
设置为变量并使用固定种子进行初始化。 tf.get_variable
或 tf.Variable
都可以。我发现 符合我的问题。
这是我的最终代码。有效。
import tensorflow as tf
initializer = tf.random_normal_initializer(seed = 1)
x = tf.get_variable(name = 'x', shape = [3], dtype = tf.float32, initializer = initializer)
y = tf.Variable(initial_value = x)
diff = tf.subtract(x, y)
avg = tf.reduce_mean(diff)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
print('x0:', sess.run(x))
print('y0:', sess.run(y))
print('x1:', sess.run(x))
print('y1:', sess.run(y))
print('x2:', sess.run(x))
print('y2:', sess.run(y))
print('diff:', sess.run(diff))
print('avg:', sess.run(avg))
sess.close()
x0: [-0.8113182 1.4845988 0.06532937]
y0: [-0.8113182 1.4845988 0.06532937]
x1: [-0.8113182 1.4845988 0.06532937]
y1: [-0.8113182 1.4845988 0.06532937]
x2: [-0.8113182 1.4845988 0.06532937]
y2: [-0.8113182 1.4845988 0.06532937]
diff: [0. 0. 0.]
avg: 0.0
我想制作一个可重复使用的 RANDOM TENSOR x
并将相同的张量分配给 VARIABLE y
。这意味着它们在 Session.run()
.
但事实并非如此。那么为什么 y
不等于 x
?
更新:
在连续多次应用 sess.run(x)
和 sess.run(y)
后,确认 x
每次都在变化,而 y
保持稳定。为什么?
import tensorflow as tf
x = tf.random_normal([3], seed = 1)
y = tf.Variable(initial_value = x) # expect y get the same random tensor as x
diff = tf.subtract(x, y)
avg = tf.reduce_mean(diff)
sess = tf.InteractiveSession()
sess.run(y.initializer)
print('x0:', sess.run(x))
print('y0:', sess.run(y))
print('x1:', sess.run(x))
print('y1:', sess.run(y))
print('x2:', sess.run(x))
print('y2:', sess.run(y))
print('diff:', sess.run(diff))
print('avg:', sess.run(avg)) # expected as 0.0
sess.close()
输出:TENSOR x 每 sess.run(x)
变化一次x0: [ 0.55171245 -0.13107552 -0.04481386]
y0: [-0.8113182 1.4845988 0.06532937]
x1: [-0.67590594 0.28665832 0.3215887 ]
y1: [-0.8113182 1.4845988 0.06532937]
x2: [1.2409041 0.44875884 0.33140722]
y2: [-0.8113182 1.4845988 0.06532937]
diff: [ 1.2404865 -1.4525002 0.05412297]
avg: -0.04116
真正的原因是:
x = tf.random_normal(seed = initial_seed)
每次应用 sess.run()
时都会进化,但如果 重新启动 运行 会生成相同的张量序列 x0-x1-x2
。 Here 对 随机种子 提供了一些解释。
为了保证在每个第一个 运行 之后都是相同的 x
,我们需要 重新初始化 它。不确定我的情况是否有合适的方法。但是我们可以将 x
设置为变量并使用固定种子进行初始化。 tf.get_variable
或 tf.Variable
都可以。我发现
这是我的最终代码。有效。
import tensorflow as tf
initializer = tf.random_normal_initializer(seed = 1)
x = tf.get_variable(name = 'x', shape = [3], dtype = tf.float32, initializer = initializer)
y = tf.Variable(initial_value = x)
diff = tf.subtract(x, y)
avg = tf.reduce_mean(diff)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
print('x0:', sess.run(x))
print('y0:', sess.run(y))
print('x1:', sess.run(x))
print('y1:', sess.run(y))
print('x2:', sess.run(x))
print('y2:', sess.run(y))
print('diff:', sess.run(diff))
print('avg:', sess.run(avg))
sess.close()
x0: [-0.8113182 1.4845988 0.06532937]
y0: [-0.8113182 1.4845988 0.06532937]
x1: [-0.8113182 1.4845988 0.06532937]
y1: [-0.8113182 1.4845988 0.06532937]
x2: [-0.8113182 1.4845988 0.06532937]
y2: [-0.8113182 1.4845988 0.06532937]
diff: [0. 0. 0.]
avg: 0.0