Machine learning 如何在Pyrotch LSTM/GRU/RNN中指定不同的层大小

Machine learning 如何在Pyrotch LSTM/GRU/RNN中指定不同的层大小,machine-learning,pytorch,lstm,recurrent-neural-network,Machine Learning,Pytorch,Lstm,Recurrent Neural Network,因此,我知道如何在Pytorch中使用LSTM。但这让我很恼火,在LSTM中只能为所有层指定一个隐藏大小。像这样: lstm=nn.lstm(输入大小=26,隐藏大小=128,层数=3,辍学率=辍学率,批处理优先=True) 因此,对于所有三层,大小将为128。但是,是否真的没有办法说,例如,第一层应该是128,第二层应该是32,第三层应该是128? 如果我在文档中遗漏了什么,或者你知道一个解决方法,请让我知道,谢谢 实际上,这取决于您输入的形状,您可以看到。此外,您必须了解什么是输入和输出,

因此,我知道如何在Pytorch中使用LSTM。但这让我很恼火,在LSTM中只能为所有层指定一个隐藏大小。像这样:

lstm=nn.lstm(输入大小=26,隐藏大小=128,层数=3,辍学率=辍学率,批处理优先=True)
因此,对于所有三层,大小将为128。但是,是否真的没有办法说,例如,第一层应该是128,第二层应该是32,第三层应该是128?
如果我在文档中遗漏了什么,或者你知道一个解决方法,请让我知道,谢谢

实际上,这取决于您输入的形状,您可以看到。此外,您必须了解什么是输入和输出,因为处理输入和输出的方法不同。在中,您可以看到模型是如何接收输入数据的。 你的模型可以是

lstm = nn.LSTM(input_size=26, hidden_size=128, num_layers=3, dropout=dropout_chance, batch_first=True)
lstm2 = nn.LSTM(input_size=26, hidden_size=32, num_layers=3, dropout=dropout_chance, batch_first=True)
lstm3 = nn.LSTM(input_size=26, hidden_size=128, num_layers=3, dropout=dropout_chance, batch_first=True)
有关多层结构,请参见此

# sequence classification model
class M1(nn.Module):
    def __init__(self):
        super(M1, self).__init__()
        
        self.recurrent_layer  = nn.LSTM(hidden_size = 100, input_size = 75, num_layers = 5)
        self.recurrent_layer1  = nn.LSTM(hidden_size = 200, input_size = 100, num_layers = 5)
        self.recurrent_layer2  = nn.LSTM(hidden_size = 300, input_size = 200, num_layers = 5)
        self.project_layer     = nn.Linear(300, 200)
        self.project_layer1    = nn.Linear(200, 100)
        self.project_layer2    = nn.Linear(100, 10)
    
    # the size of input is [batch_size, seq_len(15), input_dim(75)]
    # the size of logits is [batch_size, num_class]
    def forward(self, input, h_t_1=None, c_t_1=None):
        # the size of rnn_outputs is [batch_size, seq_len, rnn_size]
        # self.recurrent_layer.flatten_parameters()
        rnn_outputs, (hn, cn) = self.recurrent_layer(input)
        rnn_outputs, (hn, cn) = self.recurrent_layer1(rnn_outputs)
        rnn_outputs, (hn, cn) = self.recurrent_layer2(rnn_outputs)
        # classify the last step of rnn_outpus
        # the size of logits is [batch_size, num_class]
        logits = self.project_layer(rnn_outputs[:,-1])
        logits = self.project_layer1(logits)
        logits = self.project_layer2(logits)
        return logits