[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbS0Nq7P-1574305383252)(https://cdn-images-1.medium.com/max/1600/1*SXwqxZm9rkZHS851jQrYJg.png)]
公共数据集为机器学习研究的快速发展提供了十足的动力(h/t Andrew Ng ),但仅将这些数据集放入机器学习管道仍然有诸多困难。 每个研究人员都经历了编写一次性脚本用来下载和准备他们使用的每个数据集的痛苦,这些数据集都具有不同的源格式和复杂性。
今天,我们很高兴推出TensorFlow Datasets(GitHub),它将公共研究数据集公开为tf.data.Datasets和NumPy数组。 它完成了获取源数据并将其准备为磁盘上的通用格式的所有工作,并使用tf.data API构建高性能输入管道,这些管道准备好TensorFlow 2.0并可与tf.keras模型一起使用。 我们推出了29个流行的研究数据集,如MNIST,街景房号,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)
Try tfds out in a Colab notebook.
tfds.load and 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)
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文档。
Dataset Versioning
每个数据集都是版本化的(builder.info.version),这样您就可以放心,数据不会在您下面发生变化,并且结果是可重现的。 目前,我们保证如果数据发生变化,版本将会升级。
请注意,尽管我们保证在给定相同版本的情况下数据值和拆分是相同的,但我们目前不保证对同一版本的记录进行排序。
Dataset Configuration
具有不同变体的数据集使用命名的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)
请参阅有关添加数据集的文档中有关数据集配置的部分。
Text Datasets and Vocabularies
由于编码和词汇文件不同,文本数据集通常很难处理。 tensorflow-datasets使它更容易。 它包含许多文本任务,包括三种TextEncoders,所有这些都支持Unicode:
-
ByteTextEncoder用于字节/字符级编码
-
TokenTextEncoder用于基于词汇表文件的单词级编码
-
SubwordTextEncoder用于subword-level 级编码(以及构造调整到特定文本语料库的子词汇词汇的能力),具有字节级回退,因此它是完全可逆的。 例如,“hello world”可以分为[“he”,“llo”,“”,“wor”,“ld”],然后进行整数编码。 Subwords是词级和字节级编码之间的愉快媒介,在一些自然语言研究项目中很受欢迎.
可以通过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 Datasets都将在未来进一步改进文本支持。
Getting started
我们的文档站点是开始使用tensorflow-datasets的最佳位置。 以下是一些入门指南:
我们希望在未来几个月内继续添加数据集,我们当然也希望社区的加入。打开GitHub Issue以请求数据集,对下一步应添加的数据集进行投票,讨论实施或寻求帮助。 和拉请求非常欢迎! 添加一个流行的数据集以便为社区做出贡献,或者如果您有自己的数据,请将其贡献给TFDS以使您的数据着名!
现在数据很简单,你可以快乐的建模!
Acknowledgements
TensorFlow数据集是一项团队工作。 我们的核心开发人员是Etienne Pot,Afroz Mohiuddin,Pierre Ruyssen,Marcin Michalski和Ryan Sepassi。我们还要感谢Jiri Simsa对tf.data的帮助,感谢Martin Wicke对该项目的支持。 谢谢大家!
我们要感谢牛津大学的Stefan Webb允许我们使用tensorflow-datasets PyPI名称。 谢谢Stefan!
我们还要感谢Lukasz Kaiser和Tensor2Tensor项目,以激励和指导tensorflow/datasets。 谢谢Lukasz! T2T将很快迁移到tensorflow/datasets。