pytorch loss.backward()连续运行了几个小时

时间:2020-02-26 06:14:44

标签: pytorch tensor

我正在使用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。

非常感谢您!

1 个答案:

答案 0 :(得分:0)

很难给出确切的答案,但我有一个猜测。

您的代码看起来不错,但是根据您发布的输出(tensor(0.8598, grad_fn=<DivBackward0>)),我得出的结论是您在CPU上而不是在GPU上进行操作。

一种可能的解释是,向后传递不是永远运行,而是花费非常长的时间。在CPU上训练大型网络比在GPU上训练慢得多。 检查您的CPU和内存使用情况。可能是因为您的数据和模型太大而无法容纳到主内存中,从而迫使操作系统使用您的硬盘,这会使执行速度降低了几个数量级。如果是这种情况,我通常建议:

  • 使用较小的批量。
  • 缩小图像(如果可能)。
  • 仅打开当前需要的图像。
  • 缩小模型的大小。
  • 在开始训练之前,请致电model.cuda(); images = images.cuda()使用GPU(如果有)。

如果那不能解决您的问题,您可以通过执行以下操作来缩小问题范围:

  • 创建一个最小的工作示例来重现该问题。
  • 检查问题是否仍然存在于其他非常简单的模型架构中。
  • 使用不同的输入数据检查问题是否仍然存在
  • 检查问题是否在其他PyTorch版本上仍然存在
相关问题