xia*_*hen 32 python pycharm pytorch
我运行了一个关于深度学习网络的代码,首先我训练了网络,它运行良好,但是运行到验证网络时出现此错误。
我有五个 epoch,每个 epoch 都有一个训练和验证的过程。我在第一个纪元验证时遇到了错误。所以我没有运行验证代码,我发现代码可以运行到第二个纪元并且没有错误。
我的代码:
for epoch in range(10,15): # epoch: 10~15
if(options["training"]["train"]):
trainer.epoch(model, epoch)
if(options["validation"]["validate"]):
#if(epoch == 14):
validator.epoch(model)
Run Code Online (Sandbox Code Playgroud)

我觉得验证代码可能有一些错误。但我找不到那个。
K. *_*nda 28
显示了您提供的错误,因为您的 GPU 内存不足。解决此问题的一种方法是减少批处理大小,直到您的代码运行时不会出现此错误。
You*_*ark 21
1..当你只执行验证而不是训练时,
你不需要计算前向和后向阶段的梯度。
在这种情况下,您的代码可以位于
with torch.no_grad():
...
net=Net()
pred_for_validation=net(input)
...
Run Code Online (Sandbox Code Playgroud)
上面的代码不使用 GPU 内存
2.. 如果你在代码中使用 += 操作符,
它可以在你的梯度图中连续累积梯度。
在这种情况下,您需要像以下站点一样使用 float()
https://pytorch.org/docs/stable/notes/faq.html#my-model-reports-cuda-runtime-error-2-out-of-记忆
即使文档使用 float() 进行指南,在我的情况下,item() 也像
entire_loss=0.0
for i in range(100):
one_loss=loss_function(prediction,label)
entire_loss+=one_loss.item()
Run Code Online (Sandbox Code Playgroud)
3..如果在训练代码中使用for循环,
数据可以持续到整个for循环结束。
因此,在这种情况下,您可以在执行 optimizer.step() 后显式删除变量
for one_epoch in range(100):
...
optimizer.step()
del intermediate_variable1,intermediate_variable2,...
Run Code Online (Sandbox Code Playgroud)
小智 12
最好的方法是找到占用 gpu 内存的进程并杀死它:
从以下位置找到python进程的PID:
nvidia-smi
Run Code Online (Sandbox Code Playgroud)
复制PID并通过以下方式杀死它:
sudo kill -9 pid
Run Code Online (Sandbox Code Playgroud)
小智 11
我有同样的问题,这段代码对我有用:
import gc
gc.collect()
torch.cuda.empty_cache()
Run Code Online (Sandbox Code Playgroud)
我是 Pytorch 用户。就我而言,这个错误消息的原因实际上不是由于 GPU 内存,而是由于 Pytorch 和 CUDA 之间的版本不匹配。
通过以下代码检查原因是否确实是由您的 GPU 内存引起的。
import torch
foo = torch.tensor([1,2,3])
foo = foo.to('cuda')
Run Code Online (Sandbox Code Playgroud)
如果上述代码仍然出现错误,最好根据您的 CUDA 版本重新安装您的 Pytorch。(就我而言,这解决了问题。) Pytorch 安装链接
Tensorflow/Keras 也会发生类似的情况。
可能出于多种原因,我尝试在以下列表中报告:
biggest_batch_first描述。此外,我建议您查看 PyTorch 官方文档:https ://pytorch.org/docs/stable/notes/faq.html