pytorch loss.backward()持续运行数小时
我正在使用Pytork训练一些x射线图像,但我遇到了以下问题: 在以下行中:pytorch loss.backward()持续运行数小时,pytorch,tensor,Pytorch,Tensor,我正在使用Pytork训练一些x射线图像,但我遇到了以下问题: 在以下行中:loss.backward(),程序只会继续运行,永远不会结束,并且没有错误或警告 loss, outputs = self.forward(images, targets) loss = loss / self.accumulation_steps print("loss calculated: " + str(loss))
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()
在此之前计算的损失类似于张量(0.8598,grad_fn=)
有人能帮我解释一下为什么这个函数一直在运行,或者有什么好方法可以调试backward()函数吗
我正在使用torch 1.2.0+cu92和兼容的cuda 10.0
非常感谢你 很难给出确切的答案,但我有一个猜测 您的代码看起来不错,但从您发布的输出(
tensor(0.8598,grad\u fn=)
)我得出结论,您是在CPU上操作,而不是在GPU上操作
一种可能的解释是,向后传球不是永远跑,而是需要很长时间。在CPU上训练大型网络要比在GPU上训练慢得多检查您的CPU和内存利用率。这可能是因为您的数据和型号太大,无法装入主内存,迫使操作系统使用硬盘,这将使执行速度再降低几个数量级。如果是这种情况,我通常建议:
- 使用较小的批量
- 缩小图像的比例(如果可能的话)
- 仅打开当前需要的图像
- 缩小模型的尺寸
- 通过调用
model.cuda()使用GPU(如果可用);开始培训前,images=images.cuda()
- 创建一个最小的工作示例来重现问题
- 检查其他非常简单的模型体系结构是否存在此问题
- 使用不同的输入数据检查问题是否依然存在
- 使用不同的PyTorch版本检查问题是否依然存在