首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >下载MNIST数据集时出现"HTTP错误403:禁止“错误

下载MNIST数据集时出现"HTTP错误403:禁止“错误
EN

Stack Overflow用户
提问于 2020-03-05 22:48:40
回答 3查看 3.2K关注 0票数 4

我使用以下代码来获取MNIST数据集:

代码语言:javascript
运行
复制
import torchvision.datasets
MNIST_train = torchvision.datasets.MNIST('./', download=True, train=True)

这段代码以前是有效的,但现在它显示了错误:

代码语言:javascript
运行
复制
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)
EN

回答 3

Stack Overflow用户

发布于 2021-03-04 00:29:27

使用提到的here建议,将以下代码添加到我的脚本顶部:

代码语言:javascript
运行
复制
from six.moves import urllib    
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
票数 13
EN

Stack Overflow用户

发布于 2020-03-05 22:55:00

看起来你可能不得不在你的urllib请求中添加一个头(由于该站点移动到了Cloudflare保护)

例如:

代码语言:javascript
运行
复制
opener = urllib.request.URLopener()
opener.addheader('User-Agent', some_user_agent)
opener.retrieve(
    url, fpath,
    reporthook=gen_bar_updater()
)

这个问题在pytorch here的github论坛中也有提到,并提供了一些解决方案。

这里给出的一个更完整的Python3解决方案如下所示:

代码语言:javascript
运行
复制
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)

它们使用一个函数为每个检索添加头部,从而简化了过程。

票数 4
EN

Stack Overflow用户

发布于 2020-03-05 22:55:10

我查了一下,问题是这个文件夹已经移动到了CloudFlare保护之下,就像这里的一个评论者提到的:https://github.com/pytorch/vision/issues/1938

还解释了如何通过在其中添加标头来解决/修复此问题。我希望它能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60548000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档