谷歌開源機器學習數據集,可在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:https://colab.research.google.com/github/tensorflow/datasets/blob/master/docs/overview.ipynb

tfds.load(https://www.tensorflow.org/datasets/api_docs/python/tfds/load)和DatasetBuilder(https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetBuilder

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

你可以直接對所有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)

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數據集的最佳位置。以下是一些入門指南:

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

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

原文鏈接:
https://medium.com/tensorflow/introducing-tensorflow-datasets-c7f01f7e19f3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章