【问题标题】:How to ensure a tf.Variable has been initialized when using its value?如何确保 tf.Variable 在使用其值时已被初始化?
【发布时间】:2017-07-27 09:24:21
【问题描述】:

如何在确保变量已经初始化的同时获取变量的当前值? tf.Variable.initialized_value() 依赖于初始化程序,导致每次访问变量时都将其重置为其初始值。为了防止变量被重置,我尝试使用tf.cond()tf.is_variable_initialized() 作为谓词。但是,这不起作用,因为条件的真分支需要初始化变量,即使假分支处于活动状态:

import tensorflow as tf

def once_initialized_value(variable):
  return tf.cond(
      tf.is_variable_initialized(variable),
      lambda: variable.value(),
      lambda: variable.initialized_value())

a = tf.Variable(42, name='a')
b = tf.Variable(once_initialized_value(a), name='b')

sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(b))  # Error: Attempting to use uninitialized value a

【问题讨论】:

标签: python tensorflow


【解决方案1】:

Variable 类上使用initialized_value() 方法: https://github.com/tensorflow/tensorflow/blob/r1.5/tensorflow/python/ops/variables.py#L533

来自文档字符串:

# Initialize 'v' with a random tensor.
v = tf.Variable(tf.truncated_normal([10, 40]))
# Use `initialized_value` to guarantee that `v` has been
# initialized before its value is used to initialize `w`.
# The random values are picked only once.
w = tf.Variable(v.initialized_value() * 2.0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多