TypeError:'Tensor'对象不可迭代

时间:2018-01-16 23:00:44

标签: python-3.x tensorflow machine-learning deep-learning

在张量流中,我有一个512行2列的张量。我想要做的是:根据第1列的唯一值过滤张量的第2列,然后对每个唯一值(第1列)过滤内循环中第2列的相应值。

因此,作为一个例子,我有一个二维张量,值(在会话中评估后),如下所示:

[[ 509,  270],
[ 533,  568],
[ 472,  232],
..., 
[   6,  276],
[ 331,  165],
[ 401, 1144]]

509, 533, 472 ... are elements of column1 and 270, 568, 232,... are elements of column 2.

有没有办法可以define在图表中执行2个步骤(而不是在执行会话时):

  get unique values of column1
  for each `unique_value` in column1:
      values_in_column2 = values in column2 corresponding to `unique_value` (filter column2 according to unique_value`)
      some_function(values_in_column2)

我可以在运行会话时执行上述步骤,但我想在图表中定义上述两个步骤 - 我可以在定义许多后续步骤后在会话中运行。

有没有办法做到这一点?在这方面感谢任何形式的帮助。 这是我想要做的伪代码。

      tensor1 = tf.stack([column1, column2], axis = 1)
      column1 = tensor1[0, :]
      unique_column1, unique_column1_indexes = tf.unique(column1)
      for unique_column1_value in unique_column1:
          column1_2_indexes = tf.where(column1 == unique_column1_value)
          corresponding_column2_values = tensor1[column1_2_indexes][:, 1]

但截至目前,它给出了一个错误:

  TypeError: 'Tensor' object is not iterable.

在以下行:       对于unique_column1中的unique_column1_value。

我已经按照这个问题:"TypeError: 'Tensor' object is not iterable" error with tensorflow Estimator这不适用于我。 我知道我需要使用while_loop,但我不知道如何。

的问候,
萨米特

1 个答案:

答案 0 :(得分:1)

已更新:column1排序here时的解决方案。请注意,这也是更一般版本的功能请求,但因不活动而关闭。排序版本解决方案如下:

column1 = tf.constant([1,2,2,2,3,3,4])
column2 = tf.constant([5,6,7,8,9,10,11])
tensor1 = tf.stack([column1, column2], axis = 1)
unique_column1, unique_column1_indices, counts = tf.unique_with_counts(column1)
unique_ix = tf.cumsum(tf.pad(counts,[[1,0]]))[:-1]
output = tf.gather(tensor1, unique_ix)

输出:[[1,5] [2,6] [3,9] [4,11]]