【问题标题】:Pytorch, standard layer to convert sequential output to binary?Pytorch,将顺序输出转换为二进制的标准层?
【发布时间】:2020-12-30 22:27:32
【问题描述】:

我正在研究一个新的 Pytorch 模型,该模型将顺序数据作为输入,我只需要输出一个值,然后我将使用二进制交叉熵函数将其评估为 1 或 0 的概率。

更具体地说,假设我的序列是 1000 个时间步长,并且只有 2 个维度,如二维正弦波,因此数据形状为 1000 x 2。

我在使用RNN之前做过类似的事情,网上有很多内容。由于 RNN 的循环结构,为了做到这一点,我们只需在处理序列后查看 RNN 的最终输出。这样最后一步的输出将是 2 维,然后我们可以应用一个线性层来转换 2 -> 1 维,等等,就完成了。

我的问题:

我现在尝试做的不是使用循环网络,而是使用具有注意力的编码器(Transformer)。所以编码器的输出现在仍然是 1000 步长,无论我的嵌入尺寸是什么,比如 8。所以顺序编码器的输出是形状 1000 x 8。所以我的问题是我需要将此输出转换为单个值,我可以应用二进制交叉熵函数。我没有找到明显的方法来做到这一点。

想法:

传统上使用这种顺序模型,编码器输入解码器,然后解码器可以输出可变长度序列(这用于语言翻译问题)。我的问题不同之处在于我不想输出另一个序列,而只想输出一个值。也许我需要以这种方式转换解码器?解码器通常将目标值以及编码器的输出作为输入。解码器的输出然后具有与该目标值相同的形状。一个想法是使用传统的解码器并给出一个长度为 1 的目标,然后我会得到一个长度为 1 的输出,我可以使用传统的线性层将其转换为我想要的输出。然而,这似乎并不完全合乎逻辑,因为我真的对输出序列不感兴趣,而只是输出 1 个值。

无论如何,如果您有任何想法,请从社区中寻找更多想法。谢谢!

【问题讨论】:

  • 我相信你需要从实施中退后一步(即放弃 pytorch 部分)——然后它更像是一个 stats.stackexchange.com 问题 ;-)

标签: python neural-network pytorch sequential transformer


【解决方案1】:

我认为paper 可以满足您的要求 :)(可能不是第一篇这样做的论文,但这是我最近读到的)

  1. 为您的序列添加一个额外的标记。令牌可以具有可学习的嵌入。
  2. 在转换器之后,丢弃(或不计算)其他位置的输出。我们只从第一个位置获取输出,并将其转换为您需要的目标。

图片取自论文:

【讨论】:

  • 发布后我正在考虑它,经过仔细考虑后,像这样预测输出序列的“第一个位置”似乎是完全合理的。你可以利用解码器的注意力机制和一切。我要试试。
猜你喜欢
  • 2010-12-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2021-11-29
  • 2023-04-07
相关资源
最近更新 更多