在张量流中,我有一个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,但我不知道如何。
的问候,
萨米特
答案 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]]