【发布时间】: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