img src 放绝对路径报错_PyTorch 22.常见报错的原因和解法

f77784b8e5839ce2704beb96abe40952.png

这一篇我们来总结下PyTorch的常见报错信息,首先放上一个石墨文档,里面汇总着各种报错信息以及可能的原因,解决的办法,也希望的大家共建这份文档哦,为所有学习PyTorch的朋友提供帮助~ (Ps.注意遵守格式。)

石墨文档​shimo.im

下面先讲几个:

错误1:

69861c0a3c0c81f81b465a98d3365bee.png

错误2:

bf994402b192fc18a2b8d50e7e2b383a.png
# TypeError: pic should be PIL Image or ndarray. Got <class 'torch.Tensor'>

错误3:

64477a1224694123fc2e700a16b8edab.png
# RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0
flag = 0
# flag = 1
if flag:

    class FooDataset(Dataset):
        def __init__(self,  num_data, data_dir=None, transform=None):
            self.foo = data_dir
            self.transform = transform
            self.num_data = num_data

        def __getitem__(self, item):

            size = torch.randint(63, 64, size=(1, ))
            fake_data = torch.zeros((3, size, size))
            fake_label = torch.randint(0, 10, size=(1, ))

            return fake_data, fake_label

        def __len__(self):
            return self.num_data


    foo_dataset = FooDataset(num_data=10)
    foo_dataloader = DataLoader(dataset=foo_dataset, batch_size=4)

    data, label = next(iter(foo_dataloader))

错误4:

06c4bc85d1b8ef33f0070c98d29d964f.png
# Given groups=1, weight of size 6 3 5 5, expected input[16, 1, 32, 32] to have 3 channels, but got 1 channels instead
# RuntimeError: size mismatch, m1: [16 x 576], m2: [400 x 120] at ../aten/src/TH/generic/THTensorMath.cpp:752
flag = 0
# flag = 1
if flag:

    class FooDataset(Dataset):
        def __init__(self,  num_data, shape, data_dir=None, transform=None):
            self.foo = data_dir
            self.transform = transform
            self.num_data = num_data
            self.shape = shape

        def __getitem__(self, item):

            fake_data = torch.zeros(self.shape)
            fake_label = torch.randint(0, 10, size=(1, ))

            if self.transform is not None:
                fake_data = self.transform(fake_data)

            return fake_data, fake_label

        def __len__(self):
            return self.num_data

错误5:

561e4f19faf3be7e8eb9da4bf9c37f4a.png
# AttributeError: 'DataParallel' object has no attribute 'linear'

错误6:

9e8fd201a49d491d36a0b3d92e245c84.png

错误7:

7ddac6fd6aa523cf4c70b867976e135d.png

错误8:

b50e5161a77e15a52edec762e2b74162.png
# RuntimeError: Assertion `cur_target >= 0 && cur_target < n_classes' failed.

错误9:

6199c0f57b3e2e707561f377d184cbed.png
# RuntimeError: expected device cuda:0 and dtype Long but got device cpu and dtype Long
flag = 0
# flag = 1
if flag:

    x = torch.tensor([1])
    w = torch.tensor([2]).to(device)
    # y = w * x

    x = x.to(device)
    y = w * x
x在GPU上才能正常运行。
# RuntimeError: Expected object of backend CPU but got backend CUDA for argument #2 'weight'

看到这你可能没有明白上面这段代码是想表达什么意思,我们先把resnet18 迁移到GPU里面,但并未把数据也迁移进去。

inputs.to(device)
labels.to(device)
这2行并不会把数据也迁移进GPU里面,因为数据是Tensor,不会执行inplace操作。
所以,要使用下面2行:
inputs = inputs.to(device)
labels = labels.to(device)

错误10:

d6ac2b98ca40dcb9f7bfeafdaea62691.png

注意,看到这个报错信息,你一眼看不出来是哪里错了。但是他给了个解决办法:设置num_workers=0,也就是不用多线程加载数据。但如果num_workers=0的话,训练是非常慢的。这个问题的原因是是内存不够,而不是GPU memory不够。

错误11:

9859283afe9ab28f4b20cb15b24d1d46.png

这个错误的原因是GPU显存不足,可能是你的师兄师姐把卡给占完了,解决办法是等他们跑完代码或者偷偷滴把他们的进程kill掉嘻嘻~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值