我试着用LSTM和Pytorch练习。我用IMDB movie review dataset来预测评论是正面的还是负面的。我使用80%的数据集进行训练,删除标点符号,使用GloVe
(具有200个尺寸)作为嵌入层。
在培训之前,我也排除了太短(长度小于50个符号的评论)和太长的(超过1000个符号的评论)评论。
对于LSTM
层,我使用hidden dimension 256
、num_layers 2
和{lr=0.001
)一起使用。
目前我得到了85%的验证准确率和98%的训练准确率后7个时期。为了防止过度拟合并获得更高的精度,我执行了以下步骤:
在所有这些情况下,模型根本就没有学习,训练集和验证集的准确率都只有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()
我想了解:
你可以试着把注意力放在LSTM层之后。我以前也试过同样的问题。在
BiLSTM with Attention Based Sentiment Analysis
另一个选择,你可以考虑使用其他的架构,比如CNN和集成技术(它对我来说非常有用)。在
Distinguish Positive and Negative Documents
相关问题 更多 >
编程相关推荐