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 的时候已经完成了修改和切换。

 

 

# 待续