Python 如何将依赖占位符的形状传递给tf.get_variable()?
我在运行Python 如何将依赖占位符的形状传递给tf.get_variable()?,python,tensorflow,tensorflow-serving,Python,Tensorflow,Tensorflow Serving,我在运行tf.graph时遇到此错误: 当形状未完全定义时,您只能传递一个初始值设定项函数,该函数不希望对其可调用对象使用任何参数 我能够重现错误: m = tf.placeholder(shape=[None, None], dtype=tf.int32) with tf.variable_scope("foo", reuse=tf.AUTO_REUSE): v = tf.get_variable("v", shape=m.shape) with tf.Session() as se
tf.graph
时遇到此错误:
当形状未完全定义时,您只能传递一个初始值设定项函数,该函数不希望对其可调用对象使用任何参数
我能够重现错误:
m = tf.placeholder(shape=[None, None], dtype=tf.int32)
with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):
v = tf.get_variable("v", shape=m.shape)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(v))
在我的用例中,我需要一个占位符
,该占位符在程序运行时会动态更改,变量v
的形状必须取决于占位符的形状
我被谷歌搜索了很多次,没有得到任何答案,有人能帮我吗?非常感谢 问题在于
shape=m.shape
。我们只能在执行占位符之后才能得到占位符的形状。下面的代码运行时没有任何错误
m = tf.placeholder(shape=[None, None], dtype=tf.int32)
with tf.Session() as sess:
with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):
sess.run(tf.global_variables_initializer())
m_val = sess.run(m, feed_dict={m:[[2,3], [3,2]]})
v = tf.get_variable(name = "v", shape= m_val.shape)
问题在于
shape=m.shape
。我们只能在执行占位符之后才能得到占位符的形状。下面的代码运行时没有任何错误
m = tf.placeholder(shape=[None, None], dtype=tf.int32)
with tf.Session() as sess:
with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):
sess.run(tf.global_variables_initializer())
m_val = sess.run(m, feed_dict={m:[[2,3], [3,2]]})
v = tf.get_variable(name = "v", shape= m_val.shape)
你不能那样做。变量形状必须事先完全知道,它们不能根据另一个张量的形状而改变。实际上,你可以通过
validate\u shape=False
,它不会抱怨,尽管这不是一个非常广泛的实践。作为状态的文档,在这种情况下,初始值设定项必须是张量,而不是初始值设定项对象。但它不会使变量的形状随着每次输入而改变,它会在初始化时采用给定张量的形状。感谢您的快速响应。如何解决这个问题?我认为这可能是张量流的一个通用用例,变量取决于用户在飞行中设置的占位符。问题是,我不确定这是否有意义。。。拥有一个变量的意义在于拥有一个值,您可以在对run
的不同调用之间保留该值。。。那么,如果变量的形状发生变化,该如何工作呢?你想做这种事的原因到底是什么?你不能那样做。变量形状必须事先完全知道,它们不能根据另一个张量的形状而改变。实际上,你可以通过validate\u shape=False
,它不会抱怨,尽管这不是一个非常广泛的实践。作为状态的文档,在这种情况下,初始值设定项必须是张量,而不是初始值设定项对象。但它不会使变量的形状随着每次输入而改变,它会在初始化时采用给定张量的形状。感谢您的快速响应。如何解决这个问题?我认为这可能是张量流的一个通用用例,变量取决于用户在飞行中设置的占位符。问题是,我不确定这是否有意义。。。拥有一个变量的意义在于拥有一个值,您可以在对run
的不同调用之间保留该值。。。那么,如果变量的形状发生变化,该如何工作呢?你想这样做的原因到底是什么?