繁体   English   中英

为什么类对象中的 tf.Variable 初始化失败?

[英]Why does tf.Variable inside a class object fail to be initialized?

tf.global_variables_initializer() 的工作方式让我很困惑。

此代码以未初始化的错误结束:

import tensorflow as tf

class C(object):
    def __init__(self):
        self.a = tf.Variable(tf.ones(()),tf.float32)

op_init = tf.global_variables_initializer()                                                                                                                                       12
with tf.Session() as sess:

    c = C()

    sess.run(op_init)
    print(sess.run(c.a))
    # -> fail. FailedPreconditionError: Attempting to use uninitialized value Variable

但另一方面,波纹管工作。

import tensorflow as tf
class C(object):

    def __init__(self):
        self.a = tf.Variable(tf.ones(()),tf.float32)
        self.op_init = tf.global_variables_initializer()

with tf.Session() as sess:

    c = C()

    sess.run(c.op_init)
    print(sess.run(c.a))
    # -> success. '1.0'

关于初始化程序的“范围”,另一个答案是不正确的。 在任何地方创建的所有变量都添加到全局变量集合中,这是一个 Tensorflow 概念,与 Python 变量作用域无关。 不幸的是,我不再安装 TF 1.X,所以我无法真正检查,但我怀疑第一种情况的问题是您在创建变量之前创建了初始值设定项。 尝试像这样重新排序:

import tensorflow as tf

class C(object):
    def __init__(self):
        self.a = tf.Variable(tf.ones(()),tf.float32)

c = C()
op_init = tf.global_variables_initializer()                                                                                                                                       12
with tf.Session() as sess:
    sess.run(op_init)
    print(sess.run(c.a))

我所做的只是在初始化之前移动c的创建。 请让我们知道这是否有效!

Tensor 没有被初始化,因为它不在初始化函数的范围内。 第二种方式有效,因为它在范围内。 tf.global_variables_initializer()为用户提供了便利,但它不是您初始化变量的唯一方式。

第一个选项中的正确方法是将初始值作为馈送输入传递:

print(sess.run(c.a, feed_dict={c.a:1}))

这通常是您想要使用 tf.Variable 的方式,因为它的内容可能会有所不同,这意味着它可能在每次运行期间由用户初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM