tensorflow_datasets加载本地下载的数据集
最近,在学习transformer过程中调试ensorflow官方给的学习代码中,需要利用tensorflow_datasets去下载葡萄牙语-英语的翻译语料,代码如下:
import tensorflow as tf
import tensorflow_datasets as tfds
examples, metadata = tfds.load('ted_hrlr_translate/pt_to_en', with_info=True, as_supervised=True)
train_examples, val_examples = examples['train'], examples['validation']
以上的代码中,load会自动去下载对应的数据集,但是这个下载过程奇慢无比,所以我就想能不能先下载好之后再本地加载即可,所以我在网上查找了几个方法,总结如下:
- 方法一:利用环境变量设置本地代理
- 方法二:参考一个博主写的方法
针对方法一,设置代码如下:
import os
import ssl
os.environ['http_proxy'] = 'http://127.0.0.1:1080'
os.environ['https_proxy'] = 'https://127.0.0.1:1080'
ssl._create_default_https_context = ssl._create_unverified_context
这里需要你本地有梯子才行,然后ssl为关闭安全验证操作,由于我本地梯子端口为1080所以以上端口就设置为1080。通过以上设置梯子之后,速度确实明显提升,但是极其不稳定,下载一会儿就会报错,然后会生成一个残次的压缩包,你再次运行的时候就会报下载不全的错误。
针对方法二:
参考链接:https://blog.youkuaiyun.com/weixin_43788143/article/details/107820641
以上链接倒是给了我启示,不过使用上面老哥的方法也会有错误,尝试过无数次还是无法加载本地数据,其原因在于每次运行一次代码的时候感觉 tensorflow datasets都会给文件加上一个序列号(估计是用来识别每一次的下载)。所以我结合方法一和方法二自己搞了方法,结果实验成功了,具体如下:
按照参考链接中的方法找到对应的tensorflow datasets中的文件路径中产生的文件如图所示:
以上文件即为执行load之后在对应的目录下生成的,downloads为下载目录,ted_hrlr_translate为将下载目录解析之后产生的文件夹。进入downloads之后,如下图:
在方法一种由于网络不稳定,会下载一个残次的压缩文件(大概只有30MB,全部最终的大小有124MB),再结合方法二中给的下载链接:https://github.com/neulab/word-embeddings-for-nmt,进入页面后下载链接如下:
下载之后得到的文件如下:
如果现在按照参考链接中老哥所说放到对应的downloads文件夹这样是无法加载的,还是会显示找不到该文件,此处我卡了很久,突然想到是不是我命名为之前用梯子下载的残次品的文件名一样就行,效果如下:
然后试过之后还是不行,再观察了一下extracted文件夹下的结构,如下:
再点开对应文件夹中:
发现残次品种是未能解压完的文件夹,所以我将之前下载的文件解压之后将里面的datasets文件夹复制到对应的文件夹中:
最后,再执行以上的代码,效果如下:
OK!成功加载成功,后续就可以利用该翻译数据运行对应的Tansformer代码了。