首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scikit-learn 之人脸数据集

scikit-learn 之人脸数据集

作者头像
不可言诉的深渊
发布2020-02-17 15:46:23
1K0
发布2020-02-17 15:46:23
举报

最近我要对人脸数据进行特征提取,免不了获取人脸数据集,第一次运行加载人脸数据集函数需要下载数据集下载好久,当然加速下载也是很简单的。

先源码分析一波

获取人脸数据集很简单,调用 sklearn.datasets.fetch_lfw_people 函数就行了,第一次运行这个函数会从网络上下载人脸数据集,下载的很慢。要想加速下载就必须找到下载的 API,看这个 API 只有看 fetch_lfw_people 这个函数的源代码了,源代码关键部分如图所示。

下载的接口十有八九是在 _check_fetch_lfw 这个函数的内部的,我们点进去看看,如图所示。

果不其然,下载数据集直接调用的是_fetch_remote 函数!不用解释了,再去看一下 _fetch_remote 源码,如图所示。

真相大白

我看到 urlretrieve 就知道已经真相大白了,加速下载的方法也已经水落石出了——给 urlretrieve 设置 socks5 代理!这个代理设置非常简单,先调用 ProxyHandler 的构造函数,参数传入代理字典,创建一个代理对象;然后调用 build_opener 函数,参数传入之前创建的代理对象,创建一个 opener 对象;最后调用 install_opener,参数传入之前创建的 opener 对象,把之前的 opener 对象应用于全局(ProxyHandler、build_opener、install_opener 都位于 urllib.request 里面)。知道这些对于这个代理设置的代码实现就是相当简单,代码如下:

 from sklearn.datasets import fetch_lfw_people
 from urllib.request import ProxyHandler, build_opener, install_opener
 install_opener(build_opener(ProxyHandler({'http': 'socks5://localhost:1080', 'https': 'socks5://localhost:1080'})))
 fetch_lfw_people()

运行一下会发现一会就下载完事了,比直接下载要快上很多。

如果还有无法下载或者下载很慢的可以后台回复“加群”,备注:小陈学Python,不备注可是会被拒绝的哦~!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档