我正在研究自动编码器的 Pytorch 代码。训练集包含形状为
batchsize*3*height*width
的图像。该模型的代码太大,无法放在这里。一些代码是:
model = Network()
model.cuda()
#loss = nn.CrossEntropyLoss()
loss = nn.BCELoss()
optim = torch.optim.Adam(model.parameters())
我简单地得到了前向传递的输出:
y_pred = model( torch.tensor(train, dtype= torch.float).cuda())
这给出形状
batchsize*3*height1*width1
的输出。我做了相同形状的groundtruth。
损失由这条线单独调用:
l = loss(y_pred, my_list_resized.cuda())
到目前为止它运行良好......
然而,当我在循环中尝试它时:
for epoch in range(1):
y_pred = model( torch.tensor(train, dtype= torch.float).cuda())
l = loss(y_pred, my_list_resized.cuda())
optim.zero_grad()
l.backward()
optim.step()
这给出了 l.backward() 行的错误:
RuntimeError Traceback (most recent call last)
<ipython-input-31-99d4765682f1> in <module>
----> 1 l.backward()
~\anaconda3\lib\site-packages\torch\tensor.py in backward(self, gradient, retain_graph, create_graph)
219 retain_graph=retain_graph,
220 create_graph=create_graph)
--> 221 torch.autograd.backward(self, gradient, retain_graph, create_graph)
222
223 def register_hook(self, hook):
~\anaconda3\lib\site-packages\torch\autograd\__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
128 retain_graph = create_graph
129
--> 130 Variable._execution_engine.run_backward(
131 tensors, grad_tensors_, retain_graph, create_graph,
132 allow_unreachable=True) # allow_unreachable flag
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
在 epcoh 之外单独运行 l.backward() 也会出现此错误。请问有什么解决办法吗?