Llllln 发表于 2023-7-28 14:04:30

Transformer中decoder的输入

请问:

现在做时间序列预测,训练集batch之后的维度是batch*n_feature维,输入encoder时需要embedding吗?如果需要的话维度就变成batch*n_feature*embedding_size,此时调用nn.TransformerEncoderLayer()函数时,第一个参数d_model应该传入n_feature还是embedding_size呢

isdkz 发表于 2023-7-28 14:04:39

在Transformer中,decoder的输入通常需要进行embedding处理。对于时间序列预测任务,如果你的输入维度是batch * n_feature,其中n_feature表示每个时间步的特征维度,那么在输入decoder之前,你需要先将这些特征进行embedding操作。

所谓embedding,是将离散的特征映射为连续向量空间中的实数向量。这个操作有助于模型更好地学习特征之间的关系,并且能够在低维空间中表示输入信息,有利于模型的泛化能力。

因此,你的输入维度将变成batch * n_feature * embedding_size,其中embedding_size表示特征经过embedding后的向量维度。

在调用nn.TransformerEncoderLayer()函数时,第一个参数d_model应该传入embedding_size,而不是n_feature。因为d_model表示模型内部的特征维度大小,而这里的特征维度已经是embedding_size了。

总结一下:
1. 针对时间序列预测任务,需要对输入特征进行embedding操作。
2. 输入encoder的维度将变为batch * n_feature * embedding_size。
3. 调用nn.TransformerEncoderLayer()函数时,应该将embedding_size作为第一个参数d_model传入。

陶远航 发表于 2023-7-28 14:05:09

在Transformer中,Decoder的输入通常需要进行嵌入(embedding)操作。如果你的训练集批次的维度是batch * n_feature,你需要首先将每个特征嵌入到一个固定长度的向量表示中,以便Transformer能够对其进行处理。

因此,在输入Encoder之前,你需要将维度变为batch * n_feature * embedding_size。这样做是为了将每个特征转换为embedding向量,使得Transformer能够学习特征之间的关系。

当调用nn.TransformerEncoderLayer()函数时,第一个参数d_model应该传入embedding_size。这是因为它代表了嵌入后的特征向量的维 度,而不是原始特征的维度n_feature。

总结一下:
- 训练集batch的维度是batch * n_feature。
- 输入Encoder之前,需要进行嵌入操作,将维度变为batch * n_feature * embedding_size。
- 在调用nn.TransformerEncoderLayer()函数时,第一个参数d_model应该传入embedding_size。

希望这个解答对你有帮助!如果你还有其他问题,请随时提问。
页: [1]
查看完整版本: Transformer中decoder的输入