我正在尝试建立一个模型,用于学习为数据集中的某些句子分配分数(实数)。为此,我使用了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大小不同的情况?
谢谢。
答案 0 :(得分:0)
根据@Berriel:检查每个批次中的元素数量。如果小于BATCH_SIZE,则它是数据集中的最后一批。忽略最后一批可以解决问题。
if(len(batch_of_data)==BATCH_SIZE):
output,hidden= model(batch_of_data,hidden)