Problem Description
In the process of calling torchvision.datasets.CIFAR10 to download the dataset,
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
Report the following error :
Traceback (most recent call last):
File "D:/pythonCode/pytorch/Learn_Torchvision/Leran_datasets.py", line 13, in <module>
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
File "C:\Users\Administrator\miniconda3\lib\site-packages\torchvision\datasets\cifar.py", line 66, in __init__
self.download()
File "C:\Users\Administrator\miniconda3\lib\site-packages\torchvision\datasets\cifar.py", line 144, in download
download_and_extract_archive(self.url, self.root, filename=self.filename, md5=self.tgz_md5)
File "C:\Users\Administrator\miniconda3\lib\site-packages\torchvision\datasets\utils.py", line 427, in download_and_extract_archive
download_url(url, download_root, filename, md5)
File "C:\Users\Administrator\miniconda3\lib\site-packages\torchvision\datasets\utils.py", line 130, in download_url
url = _get_redirect_url(url, max_hops=max_redirect_hops)
File "C:\Users\Administrator\miniconda3\lib\site-packages\torchvision\datasets\utils.py", line 78, in _get_redirect_url
with urllib.request.urlopen(urllib.request.Request(url, headers=headers)) as response:
File "C:\Users\Administrator\miniconda3\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\Administrator\miniconda3\lib\urllib\request.py", line 525, in open
response = self._open(req, data)
File "C:\Users\Administrator\miniconda3\lib\urllib\request.py", line 542, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "C:\Users\Administrator\miniconda3\lib\urllib\request.py", line 502, in _call_chain
result = func(*args)
File "C:\Users\Administrator\miniconda3\lib\urllib\request.py", line 1393, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "C:\Users\Administrator\miniconda3\lib\urllib\request.py", line 1353, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)>
Cause Analysis:
Locate the problem when calling urllib.request.urlopen in the _get_redirect_url function of the torch.utils.data.utils.py source file by debugging.
After online data analysis: this error is because a new feature was introduced after Python 2.7.9, when using urllib.urlopen an https will verify the SSL certificate once. urllib.error.URLError is reported when the target uses a self-signed certificate.
solution:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
The last download was successful