Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将依赖占位符的形状传递给tf.get_variable()?_Python_Tensorflow_Tensorflow Serving - Fatal编程技术网

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
的不同调用之间保留该值。。。那么,如果变量的形状发生变化,该如何工作呢?你想这样做的原因到底是什么?