在tensorflow中重用变量

时间:2018-02-03 14:25:47

标签: tensorflow global-variables

我无法理解应该如何使用变量和范围。这是我尝试重新使用函数内定义的变量失败的尝试:

def basedOnVariableFunctAffectingVar(a):
    v = tf.get_variable("nameV2",
                        dtype=tf.float64,
                        initializer=tf.constant([0.0,1],
                                                dtype=tf.float64))
    aa = tf.constant(np.array([a,a]))
    t = v + aa
    v.assign(t)
    return t

然后我调用函数:

with tf.variable_scope("Scope0"):
    res1 = basedOnVariableFunctAffectingVar(2.0)

with tf.Session() as session:
    session.run(tf.global_variables_initializer())
    result1 = session.run(res1)

    with tf.variable_scope("Scope0",
                           reuse=True):
        a = tf.get_variable("nameV2", dtype=tf.float64)
    print(session.run(a))
    print(result1)

令人惊讶的是输出是:

  

[0。 1.] [2。 3。]

我期待

  

[2。 3.] [2。 3。]

感谢任何人澄清TF中变量和范围的概念。

1 个答案:

答案 0 :(得分:0)

在上面的代码中,没有人评估作业。这个修复了:

def basedOnVariableFunctAffectingVar(a):
    v = tf.get_variable("nameV2",
                        dtype=tf.float64,
                        initializer=tf.constant([0.0,1],
                                                dtype=tf.float64))
    aa = tf.constant(np.array([a,a]))
    t = v.assign(v + aa)
return t

必须评估分配变量的结果,并且在问题的功能中,评估不在运行res1所需的子图中。