我正在尝试使用Pytorch实现一个Character LSTM,但是却遇到了cudnn_status_bad_params错误。这是训练循环。我在line output = model(input_seq)上遇到错误。
for epoch in tqdm(range(epochs)):
for i in range(len(seq)//batch_size):
sidx = i*batch_size
eidx = sidx + batch_size
x = seq[sidx:eidx]
x = torch.tensor(x).cuda()
input_seq =torch.nn.utils.rnn.pack_padded_sequence(x,seq_lengths,batch_first = True)
y = out_seq[sidx:eidx]
output = model(input_seq)
loss = criterion(output,y)
loss.backward()
optimizer.step()
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
487 result = self._slow_forward(*input, **kwargs)
488 else:
--> 489 result = self.forward(*input, **kwargs)
490 for hook in self._forward_hooks.values():
491 hook_result = hook(self, input, result)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/rnn.py in forward(self, input, hx)
180 else:
181 result = _impl(input, batch_sizes, hx, self._flat_weights, self.bias,
--> 182 self.num_layers, self.dropout, self.training, self.bidirectional)
183 output = result[0]
184 hidden = result[1:] if self.mode == 'LSTM' else result[1]
RuntimeError: cuDNN error: CUDNN_STATUS_BAD_PARAM
答案 0 :(得分:0)
我遇到了同样的错误,如果您切换到CPU,则会得到对该错误的更好描述。就我而言,问题在于我向网络提供的输入类型。我发送的是long
,而模型需要float
。我进行了以下更改,并使代码正常工作。基本上切换到cpu可以提供更好的错误描述。
input_seq = input_seq.float().cuda()
答案 1 :(得分:-2)