如何将多层添加到 RNN 模块以进行情感分析?火炬

How to add multiple layers to an RNN module for sentiment analysis? Pytorch

我正在尝试使用 Pytorch(新手)创建情绪分析模型

import torch.nn as nn

class RNN(nn.Module):
 def __init__(self, input_dim, embedding_dim, hidden_dim, output_dim, dropout):
    super().__init__() #to call the functions in the superclass
    self.embedding = nn.Embedding(input_dim, embedding_dim) #Embedding layer to create dense vector instead of sparse matrix
    self.rnn = nn.RNN(embedding_dim, hidden_dim) 
    self.fc = nn.Linear(hidden_dim, output_dim)
    self.dropout = nn.Dropout(dropout)
    
def forward(self, text):
    embedded = self.embedding(text)
    output, hidden = self.rnn(embedded)   
    hidden = self.dropout(hidden[-1,:,:])
    nn.Sigmoid()
    return self.fc(hidden)

但是,准确度低于 50%,我想添加一个额外的层,也许是另一个线性层,然后再将其馈送到最后一个线性层以获得预测。我可以在 RNN 之后和最后一个 Linear 之前添加什么样的层?还有我应该用什么喂它? 我试过简单地添加另一个

output, hidden= self.fc(hidden)

但我明白了

ValueError: too many values to unpack (expected 2)

我认为这是因为激活和丢弃的前一层的输出不同。非常感谢您的帮助。

谢谢

你非常接近,只需将你的转接电话更改为:

import torch.nn.functional as F
class model_RNN(nn.Module):
 def __init__(self, input_dim, embedding_dim, hidden_dim, output_dim, dropout):
    super().__init__() #to call the functions in the superclass
    self.embedding = nn.Embedding(input_dim, embedding_dim) #Embedding layer to create dense vector instead of sparse matrix
    self.rnn = nn.RNN(embedding_dim, hidden_dim) 
    self.hidden_fc = nn.Linear(hidden_dim,hidden_dim)
    self.out_fc = nn.Linear(hidden_dim, output_dim)
    self.dropout = nn.Dropout(dropout)
    
def forward(self, text):
    embedded = self.embedding(text)
    output, hidden = self.rnn(embedded)   
    hidden = self.dropout(hidden[-1,:,:])
    hidden = F.relu(torch.self.hidden_fc(hidden))
    return self.out_fc(hidden)

请注意,调用 nn.Sigmoid() 不会对您的模型输出做任何事情,因为它只会创建一个 S 形层,但不会在您的数据上调用它。你要的大概是torch.sigmoid(self.fc(hidden))。尽管我会说不建议使用输出激活,因为一些常见的损失函数需要原始 logits。不过,请确保在评估模式下调用模型后应用 sigmoid!