【问题标题】:How to specify different layer sizes in Pytorch LSTM/GRU/RNN如何在 Pytorch LSTM/GRU/RNN 中指定不同的层大小
【发布时间】:2021-01-07 18:45:20
【问题描述】:

所以我知道如何在 Pytorch 上使用 LSTM。但这让我很烦,你只能为 LSTM 中的所有层指定一个 hidden_​​size。像这样:

lstm = nn.LSTM(input_size=26, hidden_size=128, num_layers=3, dropout=dropout_chance, batch_first=True)

所以对于所有三层,大小都是128。但是真的没有办法说,例如,第一层应该是128,第二层应该是32,第三层应该是128? 如果我遗漏了文档中的某些内容或者您知道解决方法,请告诉我,谢谢!

【问题讨论】:

    标签: machine-learning pytorch lstm recurrent-neural-network


    【解决方案1】:

    实际上,这取决于您输入的形状,您可以看到How to decide input and hidden layer dimension to torch.nn.RNN?。此外,您必须了解什么是输入和输出,因为处理输入和输出的方法不同。在A Beginner’s Guide on Recurrent Neural Networks with PyTorch 中,您可以看到模型是如何获取输入数据的。 你的模型可以是

    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)
    

    多层见model

    # 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
    

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 2019-02-27
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多