2019 年 2 月 26 日 — 由 TensorFlow 团队发布
公开数据集推动着机器学习研究的快速发展 (h/t Andrew Ng),但将这些数据集轻松地集成到你的机器学习管道中仍然非常困难。每个研究人员都不得不编写一次性脚本以下载和准备他们使用的每个数据集,而这些数据集都具有不同的源格式和复杂性。现在这一切都结束了。
今天,w…
tf.data.Datasets
和 NumPy 数组。它完成了所有繁琐的工作,例如获取源数据并将其准备为磁盘上的通用格式,并使用 tf.data API
来构建高性能输入管道,这些管道已准备好用于 TensorFlow 2.0,并可以与 tf.keras
模型一起使用。我们目前提供了 29 个流行的研究数据集,例如 MNIST、街景门牌号码、10 亿词语言模型基准测试和大型电影评论数据集,并在未来几个月内继续添加更多数据集。我们希望你加入并 添加自己的数据集。# 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 笔记本 中使用 tfds
。tfds.load
和 DatasetBuilder
DatasetBuilder.download_and_prepare
)。DatasetBuilder.as_dataset
)。DatasetBuilder.info
)。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
。所有 tf.data.Datasets
都可以轻松地使用 tfds.as_numpy()
转换为 NumPy 数组的可迭代对象。为了方便起见,你可以使用 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
),这样你就可以确信数据不会在你不知情的情况下发生变化,并且结果是可重复的。目前,我们保证如果数据发生变化,版本号将递增。请注意,虽然我们保证给定相同版本的数据值和拆分相同,但我们目前不保证相同版本的记录排序。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,所有这些都支持 UnicodeByteTextEncoder
用于字节/字符级编码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-datasets
的最佳起点。以下是一些入门时的额外提示
我们预计在未来几个月内添加数据集,我们希望社区能加入进来。打开 GitHub 问题 以请求数据集、对哪些数据集应该接下来添加进行投票、讨论实现或寻求帮助。Pull Requests 非常受欢迎!添加一个流行的数据集以贡献给社区,或者如果你有自己的数据,请将其贡献给 TFDS 以让你的数据变得流行!现在数据很容易获取,尽情建模吧!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。
2019 年 2 月 26 日 — 由 TensorFlow 团队发布
公开数据集推动着机器学习研究的快速发展 (h/t Andrew Ng),但将这些数据集轻松地集成到你的机器学习管道中仍然非常困难。每个研究人员都不得不编写一次性脚本以下载和准备他们使用的每个数据集,而这些数据集都具有不同的源格式和复杂性。现在这一切都结束了。
今天,w…