本人小白一个,最近的一个工程要用到plantvillage数据集,查了一下在tfds的databuilder列表里面,可以直接用tfds载入,但是问题来了,这个下载的速度实在太慢了…没一会儿python就报网路错误了 我进了tfds的源码里找到了plantvillage 的载入url,放迅雷里硬下完了,但是不知道怎么载入成tf.data.dataset,求问一下载入本地数据集的方法,或者如何才能让tfds载入的时候使用镜像?


TensorFlow Datasets 数据集载入?

tf.wiki

配置环境变数可以使用梯子


同问,已经迅雷下载了还是报找不到,好著急


你是问API还是问原理?


你可以看一下你用程序下载的时候,程序下载到何处,然后你就把你下载好的东西放在那

据我所知,tensorflow会自动判别你的数据集是否存在,如果存在,它就会跳过下载步骤。


这里有个大坑,tf这里会给你的路径加一些东西

代码如下:

import tensorflow_datasets as tfds
examples, metadata = tfds.load(name=ted_hrlr_translate/pt_to_en,
with_info=True,
as_supervised=True,
data_dir = "/Users/promise/Downloads/qi18naacl-dataset/pt_to_en",
download=False)

首先报错信息如下:

AssertionError: Dataset ted_hrlr_translate: could not find data in /Users/promise/Downloads/qi18naacl-dataset/pt_to_en. Please make sure to call dataset_builder.download_and_prepare(), or pass download=True to tfds.load() before trying to access the tf.data.Dataset object.

从这里可以看到,报错指明是找不到文件。

来看下源码

可以看到,源码是使用 exists校验们传的data_dir是否存在的,如果不存在会报错,但是我直接用

tf.io.gfile.exists("/Users/promise/Downloads/qi18naacl-dataset/pt_to_en") 返回是True

到这里就出现问题了,明明这个文件夹是存在的,但为什么tfds.load 会不存在呢,这里有坑!!!

直接在源码上面列印这个data_dir

输出1111111111111 False /Users/promise/Downloads/qi18naacl-dataset/pt_to_en/ted_hrlr_translate/pt_to_en/1.0.0

what f**k?

tfds.load 会自动给你拼个这东西上去:ted_hrlr_translate/pt_to_en/1.0.0

所以我们下载的文件解压之后得到datasets,然后重建一个目录,记得要包括ted_hrlr_translate/pt_to_en/1.0.0,然后把datasets/pt_to_en/* copy到新目录下

比如我的/Users/promise/tensorflow_datasets/testdata/ted_hrlr_translate/pt_to_en/1.0.0

然后tfds.load 里面的data_dir 只写到/Users/promise/tensorflow_datasets/testdata 就好

examples, metadata = tfds.load(name=ted_hrlr_translate/pt_to_en,
data_dir = "/Users/promise/tensorflow_datasets/testdata",
download=False)

然后继续报错

NotFoundError: /Users/promise/tensorflow_datasets/testdata/ted_hrlr_translate/pt_to_en/1.0.0/dataset_info.json; No such file or directory

翻遍了整个下载的文件夹,没找到dataset_info.json这个文件


两个办法。

把你下载的数据集放到tfds默认的位置,~/tensorflow_datasets目录下。

或者调用时指定数据集位置,tfds.load(name=数据集名, data_dir=你的数据集位置)。

可参考官方API文档。


最近也遇到这个问题,我的本地可以上google,但是伺服器上不去,但是代码需要在伺服器运行,两种方式:

  1. 本地使用tensorflow_datasets.load("name")下载好,mac下载地址是/Users/$user_name/tensorflow_datasets, 然后里面下载好的文件拷贝到伺服器,我的伺服器上的地址是/usr/local/app/tensorflow_datasets。
  2. 第二种还是本地下载好,然后上传到伺服器的任意一个目录,然后tensorflow_datasets.load("name", data_dir=data_dir), data_dir就是你上传的目录,比如我下载的是cnn_dailymail, 然后上传到/home/$user_name/tensorflow_datasets/cnn_dailymail, 那么导入就是:tensorflow_datasets.load("name", data_dir=「/home/$user_name/tensorflow_datasets「)。


tfds.load的参数设为download=False


你可以试试把文件放在C:UsersAdministrator.kerasdatasets下试试


推荐阅读:
相关文章