今天,调试深度学习网络代码时,遇到了两个错误,想着之前也遇见过,今天再遇见,要记下来,方便查错,也可以帮助别人,遇到这类错误的人可以有所借鉴,快速解决 Bug。
1. RuntimeError: Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor for argument
-
分析
这个错误的含义是需要传入一个
torch.FloatTensor,但是却给了一个torch.cuda.FloatTensor。Pytorch 中的类型若需要使用 GPU 进行运算加速,就要用*.cuda()或者*.to(device)来转换。比如我有个模型为model和 Tensor 变量x,如需要用 GPU 加速model和x,就可以用model.cuda()和x.cuda(),而通过查看model.weight.type()和x.type(),就可以看到它们的类型。我在出现这个错误的地方,输出了
x与model参数的类型,发现x是torch.cuda.FloatTensor,而model的参数是torch.FloatTensor,二者不能直接运算。而我之前,明明就执行过model.cuda()

本文记录了在使用 Pytorch 进行深度学习时遇到的三个问题:1) 将 CPU Tensor 与 CUDA Tensor 进行运算导致的错误;2) 多次 backward 调用时的内存释放问题;3) 程序中断后显存未释放。通过分析错误原因,提出了对应的解决方案,包括正确转换 Tensor 类型、设置 `retain_graph=True` 以及使用 `nvidia-smi` 管理显存。
最低0.47元/天 解锁文章
5005

被折叠的 条评论
为什么被折叠?



