【发布时间】:2018-12-01 03:30:16
【问题描述】:
我只是试图了解 TensorFlow 命名行为,但我仍然需要一些说明。 我在一个项目中遇到了张量命名的麻烦,因为它们是在一个函数中预定义的,稍后会调用它。
所以我这里有下面的例子:
import tensorflow as tf
def foo():
with tf.variable_scope("foo", reuse=True):
a = tf.placeholder(tf.float32,name="a")
b = tf.placeholder(tf.float32,name="b")
return a,b
##
a,b = foo()
print(a)
print(b)
我得到输出:
Tensor("foo/a:0", dtype=float32)
Tensor("foo/b:0", dtype=float32)
当我再次调用它时,我得到了输出:
Tensor("foo_1/a:0", dtype=float32)
Tensor("foo_1/b:0", dtype=float32)
为什么会这样?我将重用设置为 true,因此我希望张量再次位于同一个 variable_scope“foo”中,或者程序会抛出类似“张量已定义”的错误。
所以,我尝试了使用 tf.get_variable 的解决方法:
def foo():
with tf.variable_scope("foo", reuse=True):
a = tf.get_variable("v", [1])
return a
##
a1 = foo()
print(a1)
graph = tf.get_default_graph()
#call tensors by name in tensorflow to avoid confusion with the naming
graph.get_tensor_by_name("foo/v:0")
在这里,我总是得到相同的输出:
<tf.Variable 'foo/v:0' shape=(1,) dtype=float32_ref>
很遗憾,我无法使用变量,因为您无法为它们定义动态形状。您需要占位符来定义可变形状。 有人可以解释一下为什么程序继续为占位符创建新的 variable_scopes 而不是在我调用 tf.get_variable() 时?
谢谢!
【问题讨论】:
标签: python tensorflow naming