Получение «Ошибка HTTP 403: запрещено» при загрузке набора данных MNIST - PullRequest
1 голос
/ 05 марта 2020

Я использую следующий код для получения набора данных MNIST:

import torchvision.datasets
MNIST_train = torchvision.datasets.MNIST('./', download=True, train=True)

Этот код работал раз go, но теперь он показывает ошибку:

Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./MNIST\raw\train-images-idx3-ubyte.gz
HTTP Error 403: Forbidden
Stack trace:
 >  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Lib\urllib\request.py", line 650, in http_error_default
 >    raise HTTPError(req.full_url, code, msg, hdrs, fp)

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Кажется, вам может понадобиться добавить заголовок к вашему запросу urllib (из-за того, что сайт переходит на защиту Cloudflare)

Например.

opener = urllib.request.URLopener()
opener.addheader('User-Agent', some_user_agent)
opener.retrieve(
    url, fpath,
    reporthook=gen_bar_updater()
)

Эта проблема упоминается на форуме github. для pytorch здесь , а также с несколькими решениями для проблемы.

Одно из наиболее полных Python3 приведенных решений выглядит следующим образом:

from torchvision import datasets
import torchvision.transforms as transforms
import urllib

num_workers = 0
batch_size = 20
basepath = 'some/base/path'
transform = transforms.ToTensor()

def set_header_for(url, filename):
    opener = urllib.request.URLopener()
    opener.addheader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36')
    opener.retrieve(
    url, f'{basepath}/{filename}')

set_header_for('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', 'train-images-idx3-ubyte.gz')
set_header_for('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', 'train-labels-idx1-ubyte.gz')
set_header_for('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', 't10k-images-idx3-ubyte.gz')
set_header_for('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', 't10k-labels-idx1-ubyte.gz')
train_data = datasets.MNIST(root='data', train=True,
                                   download=True, transform=transform)
test_data = datasets.MNIST(root='data', train=False,
                                  download=False, transform=transform)

Они добавляют заголовок для каждого поиска, используя функцию, упрощающую процесс.

1 голос
/ 05 марта 2020

Я посмотрел и проблема в том, что папка перешла под защиту CloudFlare, как один из комментаторов упоминает здесь: https://github.com/pytorch/vision/issues/1938.

Также объясняется, как решить / исправить эту проблему, добавив туда заголовки. Надеюсь, это поможет.

...