最近我要对人脸数据进行特征提取,免不了获取人脸数据集,第一次运行加载人脸数据集函数需要下载数据集下载好久,当然加速下载也是很简单的。
先源码分析一波
获取人脸数据集很简单,调用 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,不备注可是会被拒绝的哦~!
本文分享自 Python机器学习算法说书人 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!