Python 在占位符输入上调节Tensorflow中的循环

Python 在占位符输入上调节Tensorflow中的循环,python,loops,neural-network,tensorflow,deep-learning,Python,Loops,Neural Network,Tensorflow,Deep Learning,我想在Tensorflow中使用loop进行某些计算。问题是,只要在条件中使用常量/变量(i小于下面代码中的var),代码就可以正常工作。但如果我对占位符变量使用循环条件,则代码无法初始化,错误为“未初始化占位符” self.batch_size = batch_size = config.batch_size #batch_size = 5, for example self._sequence_length = tf.placeholder(tf.int64, [batch_siz

我想在Tensorflow中使用loop进行某些计算。问题是,只要在条件中使用常量/变量(
i小于下面代码中的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网络中仅累积实际序列而非完整序列的Logit,或仅汇总实际序列的成本,或仅对实际序列而非完整填充序列的标记进行Viterbi推断。

通常,当使用批次大小时,有更多维度,如:
[batch\u size,output\u size]
tf.add(i,1)
返回一个张量,您可能需要使用
tf.assign\u add(i,1)
。为什么不针对您的情况使用函数
reduce\uu*
呢?通常当您使用批大小时,您会有更多的维度,例如:
[batch\u size,output\u size]
tf.add(i,1)
返回一个张量,您可能需要使用
tf.assign\u add(i,1)
。为什么不为您的情况使用函数
reduce.*
呢?这似乎是您想要的