【问题标题】:Pytorch - How to achieve higher accuracy with imdb review dataset using LSTM?Pytorch - 如何使用 LSTM 通过 imdb 审查数据集实现更高的准确性?
【发布时间】:2019-11-13 07:46:51
【问题描述】:

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

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

对于LSTM 层,我使用hidden dimension 256num_layers 2one directional 参数和0.5 dropout。之后,我有全连接层。 对于训练,我使用了 nn.BCELoss 函数和 Adam 优化器 (lr=0.001)。

目前我在 7 个 epoch 后获得了 85% 的验证准确率和 98% 的训练准确率。我做了以下步骤来防止过度拟合并获得更高的准确性:

  • 为 Adam 优化器使用 weight_decay,
  • 尝试使用 SGD (lr=0.1, 0.001) 代替 Adam,
  • 试图增加 LSTM 的 num_layers,

在所有这些情况下,模型根本没有学习,训练集和验证集的准确率都达到了 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. 如何提高准确率?

【问题讨论】:

  • 你好,我也在用 rnn 和 IMDb 做一个项目,我想知道你是否可以分享一些关于你的模型关于 forward 函数的更多细节?因为我的模型的准确性停留在 50%,而没有将双向设置为 true。

标签: python machine-learning nlp pytorch lstm


【解决方案1】:

您可以尝试将注意力放在 LSTM 层之后。我以前尝试过同样的问题。

BiLSTM with Attention Based Sentiment Analysis

另一种选择,您可以考虑使用其他架构,如 CNN 与集成技术相结合(对我来说效果很好)。

Distinguish Positive and Negative Documents

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 2014-08-25
    • 1970-01-01
    • 2020-06-05
    • 2017-10-13
    • 2020-03-29
    • 2020-09-26
    • 2021-02-20
    • 2019-01-03
    相关资源
    最近更新 更多