pytorch的向前检查输入尺寸错误

时间:2019-02-18 14:17:52

标签: python python-3.x machine-learning pytorch

我正在使用 container_commands: 03wsgipass: command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf' 创建一个 RNN ,它看起来像这样:

pytorch

我的输入class MyRNN(nn.Module): def __init__(self, batch_size, n_inputs, n_neurons, n_outputs): super(MyRNN, self).__init__() self.n_neurons = n_neurons self.batch_size = batch_size self.n_inputs = n_inputs self.n_outputs = n_outputs self.basic_rnn = nn.RNN(self.n_inputs, self.n_neurons) self.FC = nn.Linear(self.n_neurons, self.n_outputs) def init_hidden(self, ): # (num_layers, batch_size, n_neurons) return torch.zeros(1, self.batch_size, self.n_neurons) def forward(self, X): self.batch_size = X.size(0) self.hidden = self.init_hidden() lstm_out, self.hidden = self.basic_rnn(X, self.hidden) out = self.FC(self.hidden) return out.view(-1, self.n_outputs) 如下:

x

是一批大小为15的64个向量。

尝试通过以下方式测试此模型时:

tensor([[-1.0173e-04, -1.5003e-04, -1.0218e-04, -7.4541e-05, -2.2869e-05,
         -7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,
         -9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01],
        [-1.1193e-04, -1.6928e-04, -1.0218e-04, -7.4541e-05, -2.2869e-05,
         -7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,
         -9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01],
        ...

        [-6.9490e-05, -8.9197e-05, -1.0218e-04, -7.4541e-05, -2.2869e-05,
         -7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,
         -9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01]],
       dtype=torch.float64)

我收到以下错误:

BATCH_SIZE = 64
N_INPUTS = 15
N_NEURONS = 150
N_OUTPUTS = 1
model = MyRNN(BATCH_SIZE, N_INPUTS, N_NEURONS, N_OUTPUTS)
model(x)

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您缺少RNN图层所需的尺寸之一。

每个documentation的输入大小必须为形状(序列长度,批处理,输入大小)。

所以-在上面的示例中,您缺少其中之一。根据您的变量名称,您似乎正在尝试传递64个示例,每个示例包含15个输入...如果是这样,则表示缺少序列长度。

对于RNN,序列长度是您希望图层重复出现的次数。例如,在NLP中,序列长度可能等于一个句子中的单词数,而批处理大小将是您要传递的句子数,而输入大小将是每个单词的向量大小。

如果您只是想使用64个大小为15的样本,则可能不需要RNN。

答案 1 :(得分:0)

请参见documentation,RNN层期望

  

形状的输入(seq_len,batch,input_size):包含输入序列特征的张量。

在您的情况下,您的“大小”似乎是序列的长度,并且每个时间步都有一个功能。为15个功能进行了编辑,一个时间步

# 15 features, 150 neurons
rnn = nn.RNN(15, 150)
# sequence of length 1, batch size 64, 15 features
x = torch.rand(1, 64, 15)
res, _ = rnn(x)
print(res.shape)
# => torch.Size([1, 64, 150])

Also note that you don't need to prespecify batch size.