【问题标题】:Max tensor (not element) in an n-dimensional tensorn 维张量中的最大张量(非元素)
【发布时间】:2018-01-26 05:58:23
【问题描述】:

我发现在 n 维数组中获得最大张量是不可能的,即使通过对张量求和并使用gather 或gather_nd。

最大张量是指总和最高的权重集。

我有一个形状为 (-1, 4, 30, 256) 的张量,其中 256 是权重。

我需要获取每个 (-1, 0, 30)、(-1, 1, 30)、(-1, 2, 30) 和 (-1, 3, 30) 的最大权重集,所以在第二维的每个张量下。

理想情况下,这将导致 (-1, 4, 256) 张量。

reduce_max 和任何其他 max 函数只会返回最后一个维度内的最大元素值,而不是维度本身中的最大张量(即总和最高的权重集)。我试过了:

p1 = tf.reduce_sum(tensor, axis=3) # (-1, 4, 30)
p2 = tf.argmax(p1, 2) # (-1, 4)

它为第 3 维提供了适当的索引值:

[[0, 2, 2, 0],
 [0, 1, 3, 0],
 ...

但在上面运行 tf.gather 或 tf.gather_nd 不起作用,即使事先拆分我的数据并使用不同的轴。

此外,如果我手动使用gather_nd,我可以获得适当的索引,例如:

tf.gather_nd(out5, [[0,0,0], [0,1,2], [0,2,2], [0,3,0], [1,0,0], [1,1,2], [1,2,2], [1,3,1]]) 

但由于我们使用的是未知第一维的张量流变量,我无法构建这些索引。

我已经搜索了相关的解决方法,但没有发现任何适用的方法。

谁能告诉我如何做到这一点?谢谢!

编辑澄清:

权重的最大张量将是总和最大的权重集:

[[ 1, 2, 3], [0, 0, 2], [1, 0, 2]] would be [1, 2, 3]

【问题讨论】:

  • 最大张量是什么意思?你是指最大单项的张量,还是最大长度的张量,还是别的什么?
  • 具有最高总和值的权重(张量)的集合,例如权重 [[ 1, 2, 3], [0, 1, 2], [2, 0, 2]]为 [1, 2, 3]

标签: tensorflow max tensor


【解决方案1】:

我用 map_fn 弄明白了:

我将张量重塑为 (-1, 120, 256)

tfr = tf.reshape(sometensor, ((-1, 120, 256)))
def func(slice):
    f1 = tf.reduce_sum(slice, axis=1)
    f2 = tf.argmax(f1)
    return(slice[f2])
bla = tf.map_fn(func, tfr)

返回 (-1,256) 和最大的和向量(最高的权重集)。

基本上,map_fn 将沿第 2 个到最后一个轴迭代,因此它会重复切片 (120,256) 块以 func (第一个轴上有多少条目)。然后它逐块返回适当的 (1,256) 块,瞧,它给出了答案。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2020-08-31
    • 2017-12-05
    相关资源
    最近更新 更多