【问题标题】:how to apply unique_with_counts over 2d array in tensorflow如何在张量流中对二维数组应用 unique_with_counts
【发布时间】:2019-09-09 21:21:03
【问题描述】:

我有这个张量:

tf_a1 = [[0 3 1 22]
        [3 5 2  2]
        [2 6 3 13]
        [1 7 0 3 ]
        [4 9 11 10]]

我想要做的是找到在所有列中重复的唯一值超过 threshold

例如这里,34 columns 中重复。 02 columns 中重复。 23 columns 中重复,以此类推。

我希望我的输出是这样的(假设阈值为2,所以重复超过 2 次的索引将被屏蔽)。

[[F T F F]
 [T F T T]
 [T F T F]
 [F F F T]
 [F F F F]]

这就是我所做的:

y, idx, count = tf.unique_with_counts(tf_a1)   
tf.where(tf.where(count, tf_a1, tf.zeros_like(tf_a1)))

但它会引发错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:唯一 需要一个一维向量。 [操作:UniqueWithCounts]

谢谢。

【问题讨论】:

  • 在调用unique_with_counts之前将其重塑为一维怎么样?
  • @a_guest 谢谢你的回答,听起来确实不错。之后我可以再次将其重塑为二维数组。正确吗?
  • 应该可以,是的。顺便说一句,根据this issue unique_with_counts 应该支持axis 参数(尽管它没有记录?)。你能检查它是否仍然有效吗?啊等等,但这对你没有帮助,对吧?实际上,您可以在同一列中重复吗?如果是这样,那应该算作“重复”吗?
  • 实际上每列我没有重复。我搜了一下,发现`unique count应该支持多维数组加轴,但是在tensorflow网站上找不到。
  • 好的,那么我认为重塑是要走的路。

标签: python tensorflow matrix deep-learning


【解决方案1】:

目前unique_with_counts支持轴的API尚未公开。如果你想unique_with_counts 使用多维张量,你可以在 tf 1.14 中这样调用它:

from tensorflow.python.ops import gen_array_ops

# tensor 'x' is [[1, 0, 0],
#                [1, 0, 0],
#                [2, 0, 0]]
y, idx, count = gen_array_ops.unique_with_counts_v2(x, [0])
y ==> [[1, 0, 0],
       [2, 0, 0]]
idx ==> [0, 0, 1]
count ==> [2, 1]

因为我无法评论@sariii 帖子。应该是tf.greater(count,2)。另外,我认为这个解决方案不能满足问题的要求。例如,如果第一个 col 都是 2,而 col 的其余部分没有 2。根据您的要求,2 应计为 1 次。但是在您的解决方案中,如果您先重塑到 1d,那么您将丢失此信息。如果我错了,请纠正我。

issue#16503

【讨论】:

  • 感谢您在此处使用新解决方案进行更新。实际上,我每列都有唯一的数字,因此该解决方案将起作用。我相信你的方法更普遍。谢谢。
【解决方案2】:

似乎unique_with_count 应该支持多维和轴,但是我在文档中找不到任何内容。

对我来说,解决方法是首先将我的张量重塑为一维数组,然后应用unique_with_count,然后将其重塑回原始大小:

感谢@a_guest 分享这个想法

token_idx = tf.reshape(tf_a1, [-1])
y, idx, count = tf.unique_with_counts(token_idx)
masked = tf.greater_equal(count, 2)
backed_same_size = tf.gather(masked, idx)
tf.reshape(backed_same_size, shape=tf.shape(tf_a1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-29
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2019-07-11
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多