Tensorflow:tf.random_normal使用初始种子获得不同的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow:tf.random_normal使用初始种子获得不同的结果相关的知识,希望对你有一定的参考价值。

我想制作一个可重复使用的RANDOM TENSOR x并将SAME张量分配给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每次更改ser.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都可以。我发现this answer适合我的问题。

这是我的最终代码。有用。

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

以上是关于Tensorflow:tf.random_normal使用初始种子获得不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Tensorflow Profiler 在 Tensorflow 2.5 中使用“tensorflow-macos”和“tensorflow-metal”工作

python [test tensorflow] test tensorflow installation #tensorflow

关于tensorflow的显存占用问题

java调用tensorflow训练好的模型

tensorflow新手必看,tensorflow入门教程,tensorflow示例代码

tensorflow 如何在线训练模型