【问题标题】:Attempting cifar-10 download via TF and get certicate error尝试通过 TF 下载 cifar-10 并获取证书错误
【发布时间】:2021-10-21 00:37:18
【问题描述】:

我开始研究机器视觉,并尝试通过 python 代码直接下载 CIFAR-10,但一直被证书错误阻止。

不是 python 专家,不知道如何解决这个问题:

我执行python代码:

import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Input, Conv2D, Dense, Flatten, Dropout
from tensorflow.keras.layers import GlobalMaxPooling2D, MaxPooling2D
from tensorflow.keras.layers import BatchNormalization
from tensorflow.keras.models import Model
cifar10 = tf.keras.datasets.cifar10

然后如果失败并出现此错误:

Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
Traceback (most recent call last):
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1252, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1298, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1247, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1026, in _send_output
    self.send(msg)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 966, in send
    self.connect()
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1422, in connect
    server_hostname=server_hostname)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 423, in wrap_socket
    session=session
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 870, in _create
    self.do_handshake()
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1139, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1076)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\utils\data_utils.py", line 274, in get_file
    urlretrieve(origin, fpath, dl_progress)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\utils\data_utils.py", line 82, in urlretrieve
    response = urlopen(url, data)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 543, in _open
    '_open', req)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Users\test1\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1076)>

我不确定如何手动下载数据集并让 python 从磁盘加载,或者强制它忽略错误。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 用http而不是https下载
  • 请问我该如何强制 python 这样做?

标签: python-3.x tensorflow2.0


【解决方案1】:

出现错误是因为您没有安装正确的证书,并且 https 查询无法连接到 cifar-10 数据库。

您可以绕过 python 并从以下位置手动下载它:cifar-10-python.tar.gz。然后,您只需将 python 指向您下载文件的任何位置。

或者,如果您使用的是 Mac,那么您可以尝试通过运行以下文件来安装所需的证书:/Applications/Python\ 3.6/Install\ Certificates.command,然后再次运行您的脚本

或者, 编辑此文件的本地副本cifar-10.py 并重新运行您的脚本。

# line 78
origin = 'https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz'

# and change it to be:
origin = 'http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz'

根据您安装 tensorflow 的方式,该文件可能存在于几个位置。

【讨论】:

  • 好的,我是python的初学者,所以我只需要知道如何指向cifar10.tgz文件的副本并将其导入keras吗?例如c:\temp\cifar10.tgz 我见过的其他代码是 tf.keras.datasets.cifar10.load_data() 但不知道如何链接 load_data() 部分和磁盘上的 .tgz 文件。谢谢。
  • 我确实包含了用于执行此操作的确切代码:github.com/keras-team/keras/blob/master/keras/datasets/…。只需设置path = Path('c:\temp\cifar10.tgz') 即可。
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多