RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be ..

博主记录解决RuntimeError问题的过程。该错误提示输入类型与网络模型权重类型需一致。经检查,网络模型和损失函数没问题,输入数据有问题。使用GPU加速训练时,网络模型和损失函数直接.to(device),数据需转移后重新赋值,问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我第二次遇到这个问题啦,昨天遇到一遍,今天又遇到了,又花了好半天才想起来为啥(气),所以滚来做笔记了。

RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same or input should be a MKLDNN tensor and weight is a dense tensor

首先这段话的意思是:

运行时异常:输入类型为 torch.FloatTensor ,而网络模型的权重类型为 torch.cuda.FloatTensor ,这二者需要保持一致,除非输入为MKLDNN tensor类型并且权重是 dense tensor。

后半句我暂时还不懂是啥意思哈哈,但前半句是说我们的网络模型加载到cuda中了,但是输入是在cpu中的,所以出问题了。

as we know,使用GPU加速训练需要调整网络模型、损失函数还有输入数据这三处,因此我们检查如下三处:

1. 网络模型 

# 实例化模型
my_lenet5 = MyLeNet5()
my_lenet5.to(device)

没问题 √

2. 损失函数

# 损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn.to(device)

 没问题 √

3. 输入数据

    # 训练步骤
    my_lenet5.train()
    for data in train_dataloader:
        imgs, labels = data
        imgs.to(device)
        labels.to(device)

有问题!

“网络模型、损失函数都不需要另外赋值,直接 .to(device) 就可以

但是数据(图片、标注)需要另外转移之后再重新赋值给变量 ”

所以要改成:

    # 训练步骤
    my_lenet5.train()
    for data in train_dataloader:
        imgs, labels = data
        imgs = imgs.to(device)
        labels = labels.to(device)

 这样我的问题就解决啦!


红字标识的出处:

【我是土堆 - PyTorch教程】学习随手记(已更新 | 已完结 | 10w字超详细版)_如何原谅奋力过但无声的博客-CSDN博客

 大佬这篇笔记做的超详细,推荐大家看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值