如何使用pytorch nn.Transformer进行序列分类?

问题描述 投票:0回答:1

我正在使用nn.TransformerEncoder()执行序列分类任务。谁的管道类似于nn.LSTM()

我尝试了几种时间特征融合方法:

  1. 选择最终输出作为整个序列的表示。

  2. 使用仿射变换融合这些功能。

  3. 逐帧对序列进行分类,然后选择最大值作为整个序列的类别。

但是,所有这三种方法的准确性都非常差,只有4种类别的分类准确率只有[25%]。在将nn.LSTM与最后一个隐藏状态一起使用时,我可以轻松实现83%精度。我尝试了很多nn.TransformerEncoder()的超参数,但准确性没有任何改善。我现在不知道如何调整此模型。你能给我一些实用的建议吗?谢谢。

对于LSTMforward()为:

def forward(self, x_in, x_lengths, apply_softmax=False): # Embed x_in = self.embeddings(x_in) # Feed into RNN out, h_n = self.LSTM(x_in) #shape of out: T*N*D # Gather the last relevant hidden state out = out[-1,:,:] # N*D # FC layers z = self.dropout(out) z = self.fc1(z) z = self.dropout(z) y_pred = self.fc2(z) if apply_softmax: y_pred = F.softmax(y_pred, dim=1) return y_pred

对于transformer

def forward(self, x_in, x_lengths, apply_softmax=False): # Embed x_in = self.embeddings(x_in) # Feed into RNN out = self.transformer(x_in)#shape of out T*N*D # Gather the last relevant hidden state out = out[-1,:,:] # N*D # FC layers z = self.dropout(out) z = self.fc1(z) z = self.dropout(z) y_pred = self.fc2(z) if apply_softmax: y_pred = F.softmax(y_pred, dim=1) return y_pred

我正在使用nn.TransformerEncoder()执行序列分类任务。谁的管道类似于nn.LSTM()。我尝试了几种时间特征融合方法:选择最终输出为...
machine-learning deep-learning pytorch text-classification transformer
1个回答
0
投票
您提到的准确性表明出了点问题。由于您正在将LSTM与TransformerEncoder进行比较,因此我想指出一些关键的区别。
© www.soinside.com 2019 - 2024. All rights reserved.