PyTorch出现错误“RuntimeError: Found dtype Double but expected Float”

报错如下:

Traceback (most recent call last):
  File "train.py", line 116, in <module>
    trainer.train()
  File "/home/xinying/CDCN-Face-Anti-Spoofing.pytorch/trainer/FASTrainer.py", line 171, in train
    scaler.scale(loss).backward()
  File "/opt/conda/lib/python3.7/site-packages/torch/tensor.py", line 185, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "/opt/conda/lib/python3.7/site-packages/torch/autograd/__init__.py", line 127, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: Found dtype Double but expected Float

可以看到这是一个跟数据类型相关的错误;

解决方案
其实这个问题产生的原因就是数据类型不一致,比较solid一点的方法,就是从报错的地方开始一点一点调试代码,看看参与运算的张量是否存在类型不同的情况,例如:
如果a[FloatTensor]和b[DoubleTensor]是两个参与运算的张量,且有运算代码“loss = criterion(a,b)”,则会引发上面的问题。
所以可以从出错的代码位置一步步进行调试;
其实,最主要的原因还是张量类型不一致,所以实际上将张量类型统一就可以了,
可以使用代码:

torch_tensor = torch_tensor.float()
loss_15 = self.criterion(net_depth_map_15, depth_map_15.float())
loss_8 = self.criterion(net_depth_map_8, depth_map_8.float())
loss_5 = self.criterion(net_depth_map_5, depth_map_5.float())

3.1 小提示——使用double()则会占用很多显存

南溪自己试过用double()进行运算,不过这样显存占用会增大许多,而很可能出现显存爆炸的情况,所以最后还是使用FloatTensor类型;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我现在强的可怕~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值