Pytorch报urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]错误

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.
insert image description here
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
insert image description here
insert image description here
insert image description here

Guess you like

Origin blog.csdn.net/weixin_44901043/article/details/123882745