我正在使用pytorch训练一些X射线图像,但是遇到了以下问题:
在loss.backward()
行中,该程序一直运行并且永不结束,并且没有错误或警告。
loss, outputs = self.forward(images, targets)
loss = loss / self.accumulation_steps
print("loss calculated: " + str(loss))
if phase == "train":
print("running loss backwarding!")
loss.backward()
print("loss is backwarded!")
if (itr + 1 ) % self.accumulation_steps == 0:
self.optimizer.step()
self.optimizer.zero_grad()
在此之前计算出的损失类似于tensor(0.8598, grad_fn=<DivBackward0>)
。
有人能帮助我为什么它继续运行或调试backward()函数的任何好方法吗?
我正在使用兼容的cuda 10.0的手电筒1.2.0 + cu92。
非常感谢您!
答案 0 :(得分:0)
很难给出确切的答案,但我有一个猜测。
您的代码看起来不错,但是根据您发布的输出(tensor(0.8598, grad_fn=<DivBackward0>)
),我得出的结论是您在CPU上而不是在GPU上进行操作。
一种可能的解释是,向后传递不是永远运行,而是花费非常长的时间。在CPU上训练大型网络比在GPU上训练慢得多。 检查您的CPU和内存使用情况。可能是因为您的数据和模型太大而无法容纳到主内存中,从而迫使操作系统使用您的硬盘,这会使执行速度降低了几个数量级。如果是这种情况,我通常建议:
model.cuda(); images = images.cuda()
使用GPU(如果有)。如果那不能解决您的问题,您可以通过执行以下操作来缩小问题范围: