【发布时间】:2019-01-21 05:46:34
【问题描述】:
假设我有一个向量 a ,索引向量 b 的长度相同。索引范围为0~N-1,对应N组。如何在没有 for 循环的情况下为每个组做 softmax?
我在这里做一些注意力操作。每个组的数字都不相同,因此我无法将a 重塑为矩阵并在标准Softmax() API 中使用dim。
玩具示例:
a = torch.rand(10)
a: tensor([0.3376, 0.0557, 0.3016, 0.5550, 0.5814, 0.1306, 0.2697, 0.9989, 0.4917,
0.6306])
b = torch.randint(0,3,(1,10), dtype=torch.int64)
b: tensor([[1, 2, 0, 2, 2, 0, 1, 1, 1, 1]])
我想做softmax之类的
for index in range(3):
softmax(a[b == index])
但没有 for 循环以节省时间。
【问题讨论】:
-
如果我错了,请纠正我,但是您要查找的不是softmax,而是元素均方误差,对吗?由于您对 softmax 的计算会假设
a中沿主轴的值的总和为 1。 -
感谢您的回复。 Acutally 我没有在这里计算损失。
b中的索引更适合被视为组而不是类。我想要a中属于同一索引的每个 scaler 的 softmax 概率,它们使用这些概率作为权重以供以后计算。因此,每个指数的输出总和为 1,在 N 组示例中,输出总和应为 N。
标签: parallel-processing deep-learning pytorch softmax attention-model