如何将张量列表作为输入传递给tensorflow中的图形?

如何将张量列表作为输入传递给tensorflow中的图形?,tensorflow,Tensorflow,我使用[None,None,10]形状的tf.placeholder()将输入传递给张量。现在我想迭代输入的第一个维度,并对该维度中的每个片段应用一些函数。然而,当我尝试使用Pythonfor循环来实现这一点时,我得到一个错误,即张量对象是“不可编辑的” 是否有任何方法可以将输入传递为形状张量列表[None,10],以及如何将此列表分配给占位符?或者是否有其他方法来迭代张量的维度?您应该将输入作为[None,None,10]形状的单个张量x,然后使用tf.split(0,-1,x)来获得可以迭代

我使用
[None,None,10]
形状的
tf.placeholder()
将输入传递给张量。现在我想迭代输入的第一个维度,并对该维度中的每个片段应用一些函数。然而,当我尝试使用Python
for
循环来实现这一点时,我得到一个错误,即
张量
对象是“不可编辑的”


是否有任何方法可以将输入传递为形状张量列表
[None,10]
,以及如何将此列表分配给占位符?或者是否有其他方法来迭代
张量的维度?

您应该将输入作为[None,None,10]形状的单个张量
x
,然后使用
tf.split(0,-1,x)
来获得可以迭代的张量列表

这可以使用新的或(最普遍的)高阶运算符,这些运算符在0.8版中添加到TensorFlow中。您将使用的特定运算符取决于要执行的计算。例如,如果您希望对张量的每一行执行相同的函数,并将元素打包回单个张量,则可以使用
tf.map\u fn()


但这也会产生张量,对吗?那么我如何迭代它呢?不,tf.split返回一个列表而不是张量。不幸的是,因为
tf.split()
在图形构造时返回一个列表,所以
num\u split
参数必须是大于零的整数,所以我认为这不起作用。这确实有点帮助,但仍然不能解决我的问题。我之所以要遍历列表,是因为第一行的输出可能会影响其他行,而不仅仅是下一行。我可以在运行时将其转换为列表吗?您不能在运行时将其转换为列表。您可能可以使用
tf.foldl()
tf.scan()
实现您想要做的事情,因为它们可以让您在迭代之间积累一些状态。如果您想对
执行Python
循环并对每个结果应用一些Python函数,那么您需要首先将结果具体化到numpy数组中(使用会话运行)
p = tf.placeholder(tf.float32, shape=[None, None, 100])

def f(x):
    # x will be a tensor of shape [None, 100].
    return tf.reduce_sum(x)

# Compute the sum of each [None, 100]-sized row of `p`.
# N.B. You can do this directly using tf.reduce_sum(), but this is intended as 
# a simple example.
result = tf.map_fn(f, p)