为何如此。变量的值在同一程序中的不同调用时不会改变?

时间:2017-05-22 01:36:52

标签: tensorflow

在下面的代码中为什么当我打印两次时,tf.Variable valur保持不变。由于tf.truncate_normal产生随机值,所以我希望它在不同的调用时应该是不同的?

`initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0)
 output = tf.Variable(initial)
 sess = tf.InteractiveSession()
 sess.run(tf.initialize_all_variables())
 print output.eval()
 print output.eval()`

1 个答案:

答案 0 :(得分:1)

tf.Variable()Op正在使用" initial"变量作为其初始值。如果您查看Variable的帮助,您会看到_ init _方法中的第一个参数是" initial_value"。

您的代码调用" tf.initialize_all_variables()"只有一次调用initilaize op" tf.truncated_normal"它创建[2,3]矩阵以将输出初始化为相同的值。然后,您的代码将打印该变量的2个副本。如果您想重新启动变量,则需要明确说明:

initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0)
output = tf.Variable(initial)
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print output.eval()
sess.run(tf.initialize_all_variables())
print output.eval()

这可能不是您正在寻找的功能,因为这会产生副作用或重新初始化所有变量(训练权重等)。

如果您想获得随机数据集,请直接调用初始操作。另请注意,由于您没有任何需要初始化的变量或其他操作,因此您无需执行操作来准备图表。

initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0)
sess = tf.InteractiveSession()
print initial.eval() 
print initial.eval()

你可以直接混合"初始"运算数学运算符也是如此。因此,如果您在每个sess.run()中寻找随机变量,请不要使用变量,而是直接使用初始Op。