如何忽略计算softmax注意的特定列?

2024-09-28 01:30:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个基于内存网络的模型。我有(context, query, answer)的三胞胎数据。我想计算一下注意力。注意是指上下文中哪些句子应该被集中。在

为了形成小批量,我使用零填充来创建context数据。以下是注意力数据。和0值显示零填充上下文的嵌入结果。 在这样的数据中,我想将softmax应用于索引0, 1, 2, 3, last。所以模型应该忽略零填充列。在

那么我如何认识到这一点呢?我想知道当我们使用零填充和注意力机制时的一种技巧。虽然我更喜欢Pythorch,但是任何工具或只是描述的答案也会很受欢迎。在

Before softmax.  torch.bmm(contex, q)
 109.8601
  77.6376
  68.3927
 199.1673
   0.0000
   0.0000
   0.0000
   0.0000
   0.0000
   0.0000
   0.0000
   0.0000
   0.0000
   0.0000
 348.0155
[torch.cuda.FloatTensor of size 15 (GPU 0)]

After softmax. F.softmax( torch.bmm(contex, q) )
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
[torch.cuda.FloatTensor of size 15 (GPU 0)]

Tags: of数据内存模型网络sizegpucontext
1条回答
网友
1楼 · 发布于 2024-09-28 01:30:24

你可以用Pythorch中的另一个张量来下标你的张量。在

因此,如果我有:

T = torch.from_numpy(np.arange(10))

0 1 2 3 4 5 6 7 8 9 [torch.LongTensor of size 10]

那么

^{pr2}$

0 3 7 [torch.LongTensor of size 3]

所以在你的例子中,如果你有你的形状logits,你可以这样做

idx = torch.from_numpy(np.array([0, 1, 2, 3, logits.size()[1]-1]))
softmax = F.softmax(logits[:, idx])

相关问题 更多 >

    热门问题