记 Pytorch 使用错误与排查

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

今天,调试深度学习网络代码时,遇到了两个错误,想着之前也遇见过,今天再遇见,要记下来,方便查错,也可以帮助别人,遇到这类错误的人可以有所借鉴,快速解决 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 加速 modelx,就可以用 model.cuda()x.cuda(),而通过查看 model.weight.type()x.type(),就可以看到它们的类型。

    我在出现这个错误的地方,输出了 xmodel 参数的类型,发现 xtorch.cuda.FloatTensor,而 model 的参数是 torch.FloatTensor,二者不能直接运算。而我之前,明明就执行过 model.cuda()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值