问题:
pytorch用torchvision下载数据集时速度极慢,而且大概率下载失败,就很恶心人,心态炸裂,故写本文提出解决此问题的方法。
原因:
下载速度极慢主要原因是pytorch下载数据集的网站如下图所示,属于国外网站,访问受限且极不稳定,解决此问题的最好方法就是自己把mnist等数据集下载到本地,然后把download参数改为False,但此时仍然会报错!原因是没有在./MNIST/processed/目录下生成(.pt)文件。
torchvision加载mnist数据集的代码如下:
train_dataset = datasets.MNIST(
root=r'./mnist', #此处为自己定义的下载存在目录
train=True,
download=True,
transform=transform #自定义转换方式
)
解决方案:
1、mnist数据集下载链接:https://ww.lanzous.com/ibjwnoj
先下载mnist数据集到本地文件夹并解压为4个文件,本文路径为C:\Users\hq\Desktop\gan\dataset\MNIST\raw,得到的4个文件如下图所示:
2、找到C:\Users\hq\Anaconda3\Lib\site-packages\torchvision\datasets(此处为笔者torchvision的安装路径)路径下的mnist.py文件,将第30行后面几行的urls[ ]内容全部注释掉,换成如下自己的mnist下载存放的路径,再将第154行的remove_finished=True改为False(不改会在代码执行时删除原本的数据集,十分恶心),保存退出。
#urls = [
# 'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
# 'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
# 'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
# 'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz',
#]
urls = [
'file:///C:\\Users\\hq\\Desktop\\gan\\dataset\\MNIST\\raw\\train-images-idx3-ubyte.gz',
'file:///C:\\Users\\hq\\Desktop\\gan\\dataset\\MNIST\\raw\\train-labels-idx1-ubyte.gz',
'file:///C:\\Users\\hq\\Desktop\\gan\\dataset\\MNIST\\raw\\t10k-images-idx3-ubyte.gz',
'file:///C:\\Users\\hq\\Desktop\\gan\\dataset\\MNIST\\raw\\t10k-labels-idx1-ubyte.gz',
]
3、加载mnist的代码还是如下所示,注意此时download=True,运行代码(此时会报错某某文件不存在,但此步骤一定要进行)。
from torchvision import transforms
from torchvision import datasets
#自定义转换
transform = transforms.Compose([
transforms.ToTensor(),
])
train_dataset = datasets.MNIST(
root=r'./mnist',
train=True,
download=True, #一定要设为True,不然会报错
transform=transform
)
4、运行代码后,在./mnist(笔者设置的二次download路径)文件夹下会出现
MNIST文件夹,MNIST下会出现processed和raw两个子文件夹,但都是空的空的空的,此时我们返回原先自行下载存在的路径C:\Users\hq\Desktop\gan\dataset\MNIST\raw,发现多了4个 无后缀名的文件,把这4个文件剪切到./mnist/MNIST/raw文件中。(未剪切执行第5步时会报错FileNotFoundError: [Errno 2] No such file or directory: ‘./mnist\MNIST\raw\train-images-idx3-ubyte’)
5、再次运行加载mnist数据集的代码,会在./mnist/MNIST/processed文件下生成两个.pt文件,如图所示,成功!下次运行相同代码就不需要再次下载数据集了。。。
注:其他数据集的下载要修改C:\Users\hq\Anaconda3\Lib\site-packages\torchvision\datasets文件夹下的其他文件代码,其余步骤一致。