在我的简单示例中,输入最初的形状为(3,),但一旦通过body(),输入形状将为(3,2)。这些都不能用作shape_invariants。任何想法如何指定张量的形状,如果它在while循环的body()中发生了变化?
import tensorflow as tf
repeats = 2
def body(inputs, i, iter):
outputs = tf.stack([inputs,inputs],axis=1)
return [outputs, i+1, iter]
def cond(inputs, i, iter ):
return tf.less(i,repeats)
i = tf.constant(0)
iter = tf.constant(repeats)
inputs = tf.get_variable("my_variable", initializer=tf.constant([1, 2, 3]))
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(inputs.get_shape())
outputs = tf.while_loop(cond, body, loop_vars=[inputs,i, iter],shape_invariants=[tf.TensorShape([3,None]),i.get_shape(),iter.get_shape()])
print(len(outputs))
print(sess.run(outputs))
ValueError:为my_variable / read:0指定的形状不变为 与循环变量的初始形状不兼容。进入 形状为(3,)的循环,但是指定的形状不变为(3,?)。