当我运行以下Tensorflow命令时,我得到不同的结果.谁知道为什么?
import tensorflow as tf
sess = tf.Session()
var = tf.Variable(tf.truncated_normal([1,1], stddev=.1))
sess.run(tf.initialize_all_variables())
print var.eval(session=sess)
print var.initialized_value().eval(session=sess)
Run Code Online (Sandbox Code Playgroud)
生产:
[[-0.12024114]]
[[ 0.04141031]]
Run Code Online (Sandbox Code Playgroud)
mrr*_*rry 10
当你正确地计算出,直接评估的变量和评估之间的区别var.initialized_value()
是,评估var.initialized_value()
将重新执行var.initializer
,和它的副作用,修改存储在值var
.
这就留下了一个问题:我们为什么要这样做initialized_value
?原因是它在根据另一个变量定义一个变量时有所帮助.例如,假设我们要将两个变量初始化为相同的随机值.默认情况下,tf.global_variables_initializer不指定变量初始化的顺序.因此,如果变量的初始值取决于另一个变量的值,则可能会出现错误.以下代码无法可靠地运行:
v1 = tf.Variable(tf.truncated_normal([20, 20]))
v2 = tf.Variable(v1)
init_op = tf.global_variables_initializer()
sess = tf.Session()
# The following line will non-deterministically crash with an error about
# using an uninitialized value.
sess.run(init_op)
Run Code Online (Sandbox Code Playgroud)
相反,你应该定义v2
来讲v1.initialized_value()
.这对初始化程序的执行方式施加了一个顺序,并确保v1
首先初始化:
v1 = tf.Variable(tf.truncated_normal([20, 20]))
v2 = tf.Variable(v1.initialized_value())
init_op = tf.global_variables_initializer()
sess = tf.Session()
# The following line will succeed.
sess.run(init_op)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3005 次 |
最近记录: |