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 的时候已经完成了修改和切换。
# 待续
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch 的一些坑 - Python技术站