谷歌開源機器學習數據集,可在 TensorFlow 直接調用

谷歌開源機器學習數據集,可在 TensorFlow 直接調用

吳恩達說過,公共數據集為機器學習研究這枚火箭提供了動力,但將這些數據集放入機器學習管道就已經夠難的了。編寫供下載的一次性腳本,準備他們要用的源格式和複雜性不一的數據集,相信這種痛苦每個程序員都有過切身體會。但現在,你再也不會被這種痛苦困擾了。谷歌今天開源了一個機器學習數據集,可在 TensorFlow 直接調用,這為開發人員省去了不少麻煩。

照例先放數據集:

GitHub:https://github.com/tensorflow/datasets

今天,我們很高興地推出 TensorFlow 數據集,它將作為tf.data.Datasets和 NumPy 數組向公眾開放。它可以完成從獲取源數據,到準備磁盤上的通用格式的所有瑣碎工作,並使用tf.data API構建高性能輸入管道,這些管道支持 TensorFlow 2.0,並可與 tf.keras 模型一起使用。我們推出了 29 個流行的研究數據集,如 MNIST、Street View House Numbers、包含 10 億數據的語言模型基準和大型電影評論數據集,並將在未來幾個月推出更多數據集;我們也希望你可以加入並貢獻數據集。

tl;dr

複製代碼

# Install: pip install tensorflow-datasets
import tensorflow_datasets as tfds
mnist_data = tfds.load("mnist")
mnist_train, mnist_test = mnist_data["train"], mnist_data["test"]
assert isinstance(mnist_train, tf.data.Dataset)

在 Colab notebook 上試試 tfds。

tfds.load和DatasetBuilder

每個數據集都作為 DatasetBuilder 公開,它會告訴你:

  • 從哪裡下載數據以及如何提取數據並將其寫入標準格式(DatasetBuilder.download_and_prepare)。
  • 如何從磁盤加載它(DatasetBuilder.as_dataset)。
  • 以及有關數據集的所有信息,例如所有要素的名稱、類型和形狀,每個拆分中的記錄數、源 URL、數據集或相關論文的引用等(DatasetBuilder.info)。

你可以直接對所有 DatasetBuilders 進行實例化或使用 tfds.builder 字符串獲取:

複製代碼

import tensorflow_datasets as tfds

# Fetch the dataset directly
mnist = tfds.image.MNIST()
# or by string name
mnist = tfds.builder('mnist')

# Describe the dataset with DatasetInfo
assert mnist.info.features['image'].shape == (28, 28, 1)
assert mnist.info.features['label'].num_classes == 10
assert mnist.info.splits['train'].num_examples == 60000

# Download the data, prepare it, and write it to disk
mnist.download_and_prepare()

# Load data from disk as tf.data.Datasets

datasets = mnist.as_dataset()
train_dataset, test_dataset = datasets['train'], datasets['test']
assert isinstance(train_dataset, tf.data.Dataset)

# And convert the Dataset to NumPy arrays if you'd like
for example in tfds.as_numpy(train_dataset):
image, label = example['image'], example['label']
assert isinstance(image, np.array)
{1}

as_dataset()接受一個 batch_size 參數,它將提供批量示例,而不是一次一個示例。對於適合內存的小型數據集,你可以用 batch_size = -1 立即獲取整個數據集作為 tf.Tensor。使用tfds.as_numpy()可以輕鬆地將所有 tf.data.Datasets 轉換為 NumPy 數組的參數。

為方便起見,你可以使用tfds.load執行以上所有操作,tfds.load 按名稱獲取 DatasetBuilder,調用 download_and_prepare()以及 as_dataset()。

複製代碼

import tensorflow_datasets as tfds

datasets = tfds.load("mnist")
train_dataset, test_dataset = datasets["train"], datasets["test"]
assert isinstance(train_dataset, tf.data.Dataset)

你也可以通過傳遞 with_info = True 輕鬆地從 tfds.load 獲取DatasetInfo 對象。有關所有選項,請參閱API 文檔。

數據集版本管理

每個數據集都是版本化的(builder.info.version),你大可放心,數據不會隨意發生變化,且結果是可重現的。目前,我們保證如果數據發生變化,將增加版本。

請注意,儘管目前我們保證給定同一版本下的數據值和拆分是相同的,但不保證對同一版本的記錄進行排序。

數據集配置

具有不同變體的數據集使用命名的 BuilderConfigs 進行配置。例如,大型電影評論數據集 (tfds.text.IMDBReviews ) 不同的輸入可能有不同的編碼(例如,純文本、字符編碼或子詞編碼)。內置配置與數據集文檔一起列出,可以通過字符串進行尋址,也可以傳入你自己的配置。

複製代碼

# See the built-in configs
configs = tfds.text.IMDBReviews.builder_configs
assert "bytes" in configs

# Address a built-in config with tfds.builder
imdb = tfds.builder("imdb_reviews/bytes")
# or when constructing the builder directly
imdb = tfds.text.IMDBReviews(config="bytes")
# or use your own custom configuration
my_encoder = tfds.features.text.ByteTextEncoder(additional_tokens=['hello'])
my_config = tfds.text.IMDBReviewsConfig(
name="my_config",
version="1.0.0",
text_encoder_config=tfds.features.text.TextEncoderConfig(encoder=my_encoder),
)
imdb = tfds.text.IMDBReviews(config=my_config)

請參閱有關添加數據集的文檔中有關數據集配置的部分。

文本數據集和詞彙表

由於編碼和詞彙文件不同,文本數據集通常很難處理。tensorflow-datasets 讓這一過程變得更簡單。它包含許多文本任務,包括三種 TextEncoders,且都支持 Unicode:

  • ByteTextEncoder 用於字節 / 字符級編碼
  • TokenTextEncoder 用於基於詞彙表文件的單詞級編碼
  • SubwordTextEncoder 用於子詞級編碼(以及針對特定文本語料庫創建子詞詞彙的能力),可以字節級回退,因此它是完全可逆的。例如,“hello world”可以拆分為 [“he”,“llo”,“”,“wor”,“ld”],然後進行整數編碼。子詞是詞級和字節級編碼之間的媒介,在一些自然語言研究項目中很受歡迎。

可以通過 DatasetInfo 訪問編碼器及其詞彙表大小:

複製代碼

imdb = tfds.builder("imdb_reviews/subwords8k")

# Get the TextEncoder from DatasetInfo
encoder = imdb.info.features["text"].encoder
assert isinstance(encoder, tfds.features.text.SubwordTextEncoder)

# Encode, decode
ids = encoder.encode("Hello world")
assert encoder.decode(ids) == "Hello world"

# Get the vocabulary size
vocab_size = encoder.vocab_size

TensorFlow 和 TensorFlow 數據集都將在未來進一步改進文本支持。

入門

我們的文檔站點是開始使用 tensorflow 數據集的最佳位置。以下是一些入門指南:

  • 數據集頁面
  • API 文檔
  • Colab 教程
  • 如何添加數據集
  • GitHub

我們將在未來幾個月內添加更多數據集,並希望社區能夠加入。如果你需要什麼數據集,請在 GitHub 創建話題,我們將對下一步應添加的數據集進行投票,討論實施細節或尋求幫助。非常歡迎 Pull Requests!人人獻出一點數據集,讓社區變得更美好,把你的數據集貢獻給 TFDS 聲名大噪吧!

當獲取數據變得簡單,我們就能快樂地建模!

原文鏈接:

https://medium.com/tensorflow/introducing-tensorflow-datasets-c7f01f7e19f3


分享到:


相關文章: