Pythorch如何使用LSTM实现imdb review数据集的更高精度?

2024-03-29 14:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用LSTM和Pytorch练习。我用IMDB movie review dataset来预测评论是正面的还是负面的。我使用80%的数据集进行训练,删除标点符号,使用GloVe(具有200个尺寸)作为嵌入层。

在培训之前,我也排除了太短(长度小于50个符号的评论)和太长的(超过1000个符号的评论)评论。

对于LSTM层,我使用hidden dimension 256num_layers 2和{}参数和{}。之后,我已经完全连接层。 我用过的训练nn.B塞洛斯函数与Adam优化器(lr=0.001)一起使用。

目前我得到了85%的验证准确率和98%的训练准确率后7个时期。为了防止过度拟合并获得更高的精度,我执行了以下步骤:

  • 为Adam优化器使用了权重衰减
  • 尝试了(0.001),而不是0.001 SGD
  • 试图增加LSTM的层数

在所有这些情况下,模型根本就没有学习,训练集和验证集的准确率都只有50%。

class CustomLSTM(nn.Module):
    def __init__(self, vocab_size, use_embed=False, embed=None, embedding_size=200, hidden_size=256,
                 num_lstm_layers=2, bidirectional=False, dropout=0.5, output_dims=2):
        super().__init__()

        self.vocab_size = vocab_size
        self.embedding_size = embedding_size
        self.hidden_size = hidden_size
        self.num_lstm_layers = num_lstm_layers
        self.bidirectional = bidirectional
        self.dropout = dropout

        self.embedding = nn.Embedding(vocab_size, embedding_size)
        if use_embed:
            self.embedding.weight.data.copy_(torch.from_numpy(embed))
#             self.embedding.requires_grad = False
        self.lstm = nn.LSTM(input_size=embedding_size,
                           hidden_size=hidden_size,
                           num_layers=num_lstm_layers,
                           batch_first=True,
                           dropout=dropout,
                           bidirectional=bidirectional)
#         print('output dims value ', output_dims)
        self.drop_fc = nn.Dropout(0.5)
        self.fc = nn.Linear(hidden_size, output_dims)
        self.sig = nn.Sigmoid()

我想了解:

  1. 为什么模型在应用这些更改后根本不学习?在
  2. 如何提高准确度?在

Tags: selfoutputsizelayers评论embednnembedding