【发布时间】:2020-03-03 03:33:05
【问题描述】:
我尝试在 PyTorch 论坛上提出这个问题,但没有得到任何回应,所以我希望这里有人可以帮助我。此外,如果有人有使用变压器模块的好例子,请分享它,因为文档仅显示使用简单的线性解码器。对于变压器,我知道我们通常会输入实际的目标序列。因此,我的第一个问题是,在转换器之前,我有一个标准线性层来转换我的时间序列序列以及位置编码。根据文档,transformer 模块代码的 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] 标记来表示句子的开头和结尾,但是对于时间序列,我假设我不需要分隔时间步。
【问题讨论】:
标签: python deep-learning pytorch