gpt4 book ai didi

python - 使用完整的 PyTorch 变压器模块

转载 作者:行者123 更新时间:2023-12-03 13:33:09 25 4
gpt4 key购买 nike

我尝试在 PyTorch 论坛上提出这个问题,但没有得到任何回应,所以我希望这里有人可以帮助我。此外,如果有人有使用变压器模块的好例子,请分享它,因为文档仅显示使用简单的线性解码器。对于变压器,我知道我们通常会输入实际的目标序列。因此,我的第一个问题是,在转换器之前,我有一个标准线性层来转换我的时间序列序列以及位置编码。根据文档,变压器模块代码 src 和 trg 序列需要具有相同的维度。

    from torch.nn.modules.transformer import Transformer
class TransformerTimeSeries(torch.nn.Module):
def __init__(self, n_time_series, d_model=128):
super()._init__()
self.dense_shape = torch.nn.Linear(n_time_series, d_model)
self.pe = SimplePositionalEncoding(d_model)
self.transformer = Transformer(d_model, nhead=8)
所以我想知道我可以简单地做这样的事情还是会以某种方式泄露有关目标的信息?我仍然不确定 loss.backward() 是如何工作的,所以我不确定这是否会导致问题。
    def forward(self, x, t):
x = self.dense_shape(x)
x = self.pe(x)
t = self.dense_shape(t)
t = self.pe(t)
x = self.transformer(x, t)
其次,目标序列是否需要任何形式的偏移?例如,如果我有时间序列 [0,1,2,3,4,5,6,7]我想喂 [0,1,2,3]预测 [4,5,6,7] (tgt)?我会像那样简单地喂它还是更复杂?通常 BERT 和那些模型有 [CLS] 和 [SEP] 标记来表示句子的开头和结尾,但是对于时间序列,我假设我不需要分隔时间步长。

最佳答案

loss.backward()遍历模型的梯度图,沿途更新各个分量的梯度。您可以使用名为 PytorchViz 的辅助库查看图表。 .以下是您可以使用此库进行可视化的示例:
enter image description here
无论您是否使用它,看起来您都在为目标和输入使用相同的密集层。由于密集层将跟踪梯度,因此它将计算目标的梯度另外到梯度输入,这确实会导致模型基于目标序列进行学习。
至于你的第二个问题。我想喂模型[0,1,2,3]为了预测 [4,5,6,7]将根据您使用的数据正常工作。如果您使用的是周期性信号(即心电图时间序列、sinx 等),我认为它会做得很好,无需进一步复杂化。
但是,如果您想预测某些事件,例如句子结束或价格预测(例如交易日结束),那么您将需要添加代币来创建一个健壮的模型(并不是说没有它们它会失败,但它肯定会有所帮助预测精度)。

关于python - 使用完整的 PyTorch 变压器模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com