我不明白应该如何使用变量和作用域。这是我尝试重新使用函数中定义的变量的失败尝试:
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 中变量和范围的概念。
在上面的代码中,没有人评估分配。这将修复:
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 所需的子图中。