【问题标题】:Tensorflow: var.eval() vs. var.initialized_value().eval()张量流:var.eval() 与 var.initialized_value().eval()
【发布时间】:2016-01-19 12:11:07
【问题描述】:

当我运行以下 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)

生产:

[[-0.12024114]]
[[ 0.04141031]]

【问题讨论】:

  • 再运行一次,你会发现结果和之前不一样。

标签: python tensorflow


【解决方案1】:

正如您正确的worked out,直接评估变量和评估var.initialized_value() 之间的区别在于评估var.initialized_value() 将重新执行var.initializer,并且——作为副作用——修改存储在@987654327 中的值@。

这就留下了一个问题:为什么我们有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)

相反,您应该根据v1.initialized_value() 定义v2。这对如何执行初始化程序施加了一个顺序,并确保首先初始化 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)

【讨论】:

    【解决方案2】:

    好的 - 简单。不同输出的原因是 initialized_value() 重新运行了初始化操作。因此结果不同。

    initialized_value() 方法返回用于初始化变量的值(在本例中为随机数)。

    我希望在一些操作后复制变量的值,然后遇到了 initialized_value() 方法作为复制变量的一种方式。但是,这似乎只有在您想复制初始值时才适用。虽然从名字上听上去有点明显......

    import tensorflow as tf
    
    sess = tf.Session()
    var = tf.Variable([[1.234]])
    sess.run(tf.initialize_all_variables())
    
    print var.eval(session=sess)
    print var.initialized_value().eval(session=sess)
    
    var.assign_add([[2]]).eval(session=sess)
    
    print var.eval(session=sess)
    print var.initialized_value().eval(session=sess)
    

    产生:

    [[ 1.23399997]]
    [[ 1.23399997]]
    
    [[ 3.23399997]]
    [[ 1.23399997]]
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2020-03-12
      • 1970-01-01
      • 2021-08-16
      • 2018-11-19
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多