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

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

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博客

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

你可能感兴趣的:(深度学习,人工智能)