本人小白一個,最近的一個工程要用到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下試試


推薦閱讀:
相關文章