Попытка загрузки cifar-10 через TF и получение сертификата об ошибке

#python-3.x #tensorflow2.0

Вопрос:

Я начинаю с машинного зрения и попытался загрузить CIFAR-10 напрямую с помощью кода python, но меня все время останавливает ошибка сертификата.

Не будучи экспертом по 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:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "C:Userstest1AppDataLocalProgramsPythonPython37libhttpclient.py", line 1252, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:Userstest1AppDataLocalProgramsPythonPython37libhttpclient.py", line 1298, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:Userstest1AppDataLocalProgramsPythonPython37libhttpclient.py", line 1247, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:Userstest1AppDataLocalProgramsPythonPython37libhttpclient.py", line 1026, in _send_output
    self.send(msg)
  File "C:Userstest1AppDataLocalProgramsPythonPython37libhttpclient.py", line 966, in send
    self.connect()
  File "C:Userstest1AppDataLocalProgramsPythonPython37libhttpclient.py", line 1422, in connect
    server_hostname=server_hostname)
  File "C:Userstest1AppDataLocalProgramsPythonPython37libssl.py", line 423, in wrap_socket
    session=session
  File "C:Userstest1AppDataLocalProgramsPythonPython37libssl.py", line 870, in _create
    self.do_handshake()
  File "C:Userstest1AppDataLocalProgramsPythonPython37libssl.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:Userstest1AppDataLocalProgramsPythonPython37libsite-packageskerasutilsdata_utils.py", line 274, in get_file
    urlretrieve(origin, fpath, dl_progress)
  File "C:Userstest1AppDataLocalProgramsPythonPython37libsite-packageskerasutilsdata_utils.py", line 82, in urlretrieve
    response = urlopen(url, data)
  File "C:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.py", line 525, in open
    response = self._open(req, data)
  File "C:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.py", line 543, in _open
    '_open', req)
  File "C:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.py", line 503, in _call_chain
    result = func(*args)
  File "C:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:Userstest1AppDataLocalProgramsPythonPython37liburllibrequest.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 с диска, либо заставить его игнорировать ошибку.

Любая помощь будет признательна. Заранее спасибо.

Комментарии:

1. Загружайте по протоколу http вместо https

2. Как мне заставить python сделать это, пожалуйста?

Ответ №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.

Комментарии:

1. Хорошо, я новичок в python, поэтому все, что мне нужно знать, это как указать на копию файла cifar10.tgz и импортировать его в keras, пожалуйста? например c:tempcifar10.tgz Другой код, который я видел, — это tf.keras.datasets.cifar10.load_data (), но я не уверен, как связать часть load_data() и файл .tgz на диске. Спасибо.

2. Я буквально включил точный код, который используется для этого: github.com/keras-team/keras/blob/master/keras/datasets/. … Просто установите path = Path('c:tempcifar10.tgz') , и это сработает.