我想在Tensorflow中使用循环进行某些计算。问题是只要在条件中使用常量/变量(下面的代码中为i less than var
),代码就可以正常工作。但是,如果我对占位符变量使用循环条件,则代码无法初始化,并且错误为“未初始化的占位符”。
self.batch_size = batch_size = config.batch_size #batch_size = 5, for example
self._sequence_length = tf.placeholder(tf.int64, [batch_size], name='sequence_length_placeholder')
def condfunc(i, var, sum, seq):
return tf.less(i, var)
def bodyfunc(i, var, sum, seq):
return [tf.add(i, 1), var, tf.add(sum, tf.gather(seq, i)), seq]
i = tf.constant(0)
sum = tf.constant(0)
#var = tf.Variable(tf.gather(tf.shape(self._sequence_length), 0)) #Error on conditioning on placeholder tensor
var = tf.Variable(batch_size)
_, _, sum, seq = tf.while_loop(condfunc, bodyfunc, [i, var, sum, self._sequence_length])
那么,我们如何在动态输入(占位符)上调整Tensorflow中的循环?
备注:下面的代码段在用例方面没有意义,但是用于突出显示所面临的问题。实际使用案例可以只累计RNN网络中实际序列的对数而不是完整序列的对数,或者只计算实际序列的成本,或仅仅是实际序列的标签的维特比推断而不是完整的填充序列。