首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何忽略特定列来计算softmax关注?

如何忽略特定列来计算softmax关注?
EN

Stack Overflow用户
提问于 2018-01-21 12:56:24
回答 1查看 474关注 0票数 1

我正在实现一个基于MemoryNetworks的模型。我有(context, query, answer)的三元组数据。我想要计算注意力。注意力指示上下文中的哪些句子应该被关注。

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

那么我该如何认识到这一点呢?我想知道当我们使用补零和注意力机制时,这样的技术。虽然我更喜欢pytorch,但任何工具或只是描述答案也将受到感谢。

代码语言:javascript
运行
复制
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)]
EN

回答 1

Stack Overflow用户

发布于 2018-02-05 21:45:54

你可以在pytorch中用另一个张量作为张量的下标。

因此,如果我有:

代码语言:javascript
运行
复制
T = torch.from_numpy(np.arange(10))

大小为10的

0 1 2 3 4 5 6 7 8 9 torch.LongTensor

然后

代码语言:javascript
运行
复制
T[torch.from_numpy(np.array([0, 3, 7]))]

大小为3的

0 3 7 torch.LongTensor

所以在您的例子中,如果您有shape MBxDlogits,您可以这样做

代码语言:javascript
运行
复制
idx = torch.from_numpy(np.array([0, 1, 2, 3, logits.size()[1]-1]))
softmax = F.softmax(logits[:, idx])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48363823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档