• pytorch 的一些坑


    1.  Colthing1M 数据集中有的图片没有 224*224大, 直接用 transforms.RandomCrop(224) 就会报错,RandomRange 错误

      raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))  ValueError

          需要先加上 transform.Resize((256,256))

      transforms.Resize((256, 256)),
      transforms.RandomCrop(224),

    2. CIFAR-10 默认保存到主文件 main.py 同层次的 data 文件夹,但是若自己已经命名了一个 data 文件夹,就会造成 ./data/data/cifar-10-batches-py 嵌套。

        注意把自己命名的改成 my_data or noisy_data 就好。

        似乎是另一个问题,当前的 main.py 可能是 训练的 main.py 也可以是 noisy_cifar.py, 运行noisy_cifar.py 就会在 noisy_cifar.py 同层次生成 data 文件夹。

        若是运行主文件调用 noisy_cifar.py 就会在主文件的层次生成 data 文件夹。

    3. np.min 无法作用于一个生成器上,必须要显示转换为list,例如 :

    np.min([x^2 for x in range(10)]) # one scalar
    np.min(x^2 for x in range(10)) # one generator: error

    4. 在读数据时, 把 indexes 当做data 读了进去

        #for i, (data, labels, indexes) in enumerate(train_loader): # bug 
        for i, (indexes, data, labels) in enumerate(train_loader):

        所以导致了如下 bug

      File "/root/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 489, in __call__
        result = self.forward(*input, **kwargs)
      File "/root/guixj/2019.11.23WebVision_dataset/Inception_resnetV2.py", line 331, in forward
        x = self.features(input)
      File "/root/guixj/2019.11.23WebVision_dataset/Inception_resnetV2.py", line 307, in features
        x = self.conv2d_1a(input)
      File "/root/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 489, in __call__
        result = self.forward(*input, **kwargs)
      File "/root/guixj/2019.11.23WebVision_dataset/Inception_resnetV2.py", line 50, in forward
        x = self.conv(x)
      File "/root/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 489, in __call__
        result = self.forward(*input, **kwargs)
      File "/root/anaconda3/lib/python3.7/site-packages/torch/nn/modules/conv.py", line 320, in forward
        self.padding, self.dilation, self.groups)
    RuntimeError: Expected 4-dimensional input for 4-dimensional weight [32, 3, 3, 3], but got 1-dimensional input of size [64] instead

    5. Pytorch 使用 GPU:

         1.  在定义model 时就要用 model.to(device)

       2.  data 也要 to(device) 有两种方式,

           1).  在训练或者测试时,对每个 minibatch 进行 to(device) 操作

           2).  在构造 dataloader 时进行 to(device) 操作 

      images = Variable(images).cuda()
      labels = Variable(labels).cuda() # use it 

        3.  最早版本的损失函数, cross-entropy loss 也要进行 to(device) 操作, 我在 L_DMI 的代码中发现了这个

    6. torchvision 0.2.1 的 CIFAR-10 数据集使用的变量名是 train_labels, 但是 torchvision 0.2.2(or higher version) 将名字改了,从 labels 改成了 targets,导致了版本不兼容。

        参见 https://github.com/YU1ut/MixMatch-pytorch/issues/2

        之前跑对应的 MixMatch 的代码,而我之前的电脑都是 torchvision 0.2.1 (conda list torchvision), 因此我就自己改回来了,但可能会发生错误,这一次 IJCAI-21 准备兼容更高的版本,改成targets.

       我当前写的 noisy data 的生成代码,没有任何问题,因为没有利用到 targets 这一变量以及接口。仅仅是 mixmatch_data 对应的 cifar10 的代码用到了 targets, 所以出现问题。

       早前的版本: base_dataset.train_labels   ->   新的版本:  base_dataset.targets 

    train_data -> data

    test_labels -> targets

    test_data -> data

       我在 2019.9.17_select_small_clean_data_and_using_MixMatch 就已经改了过来,不过是改成了更低的版本。战略上的大错误!

     2021.1.20 在准备 source_code 的时候已经完成了修改和切换。

    # 待续

  • 相关阅读:
    洛谷 P2234 [HNOI2002]营业额统计
    洛谷p3146&p3147
    洛谷 p1439 最长公共子序列
    搜索
    一步一步分析Caliburn.Micro(二:绑定执行方法Message现学现卖之自定命令)
    一步一步分析Caliburn.Micro(一:绑定执行方法Message)
    整理的C# 字符串类
    不用ADOX.CatalogClass创建Access数据库文件
    取远程网页数据 WebClient,HttpWebRequest
    C# LinQ 与 ADO.NET
  • 原文地址:https://www.cnblogs.com/Gelthin2017/p/12033396.html
Copyright © 2020-2023  润新知