如何在Tensorflows while_loop中设置shape_invariant来增加张量

时间:2019-02-04 16:51:51

标签: python tensorflow while-loop

在我的简单示例中,输入最初的形状为(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,?)。

0 个答案:

没有答案