RuntimeError:预期的隐藏大小(2,24,50),得到(2,30,50)

时间:2019-07-22 14:52:36

标签: python pytorch lstm recurrent-neural-network gated-recurrent-unit

我正在尝试建立一个模型,用于学习为数据集中的某些句子分配分数(实数)。为此,我使用了RNN(在PyTorch中)。 我已经定义了一个模型:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl;
    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    location /vue {
        // I try to make root path but It's not workking error 500 when I uncomment #root
           #root /var/www/html/vue;
           try_files $uri $uri/ /vue/index.html;
    }
}

火车功能为:

class RNNModel1(nn.Module):

    def forward(self, input ,hidden_0):

        embedded = self.embedding(input)
        output, hidden = self.rnn(embedded, hidden_0)
        output=self.linear(hidden)
        return output , hidden

运行代码时,我收到此错误:

  

RuntimeError:预期的隐藏大小(2,24,50),得到(2,30,50)

批处理大小= 30,隐藏大小= 50,层数= 1,双向= True。

我在最后一批数据中收到该错误。 我检查了PyTorch中RNN的描述以解决此问题。 PyTorch中的RNN具有两个输入参数和两个输出参数。输入参数是 input h_0 h_0 是一个张量,其中包括批量大小(num_layers * num_directions,批处理,隐藏大小)中每个元素的初始隐藏状态。 输出参数为 output h_n h_n 是一个张量,其中包括t = seq_len大小(num_layers * num_directions,批处理,隐藏大小)的隐藏状态。

在所有批次(最后一批除外)中,h_0和h_n的大小相同。但在最后一批中,元素数量可能少于批大小。因此,h_n的大小为(num_layers num_directions,maintain_elements_in_last_batch,隐藏大小),但h_0的大小仍为(num_layers num_directions,batch_size,隐藏大小)。

所以我在最后一批数据中收到该错误。

如何解决此问题并处理h_0和h_n大小不同的情况?

谢谢。

1 个答案:

答案 0 :(得分:0)

根据@Berriel:检查每个批次中的元素数量。如果小于BATCH_SIZE,则它是数据集中的最后一批。忽略最后一批可以解决问题。

if(len(batch_of_data)==BATCH_SIZE):
    output,hidden= model(batch_of_data,hidden)