TensorFlow Datasets介绍

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


:TensorFlow

编译:ronghuaiyang

前戏

本文介绍了TensorFlow的Datasets,可以利用这个非常方便的使用内置的数据集。

640?wx_fmt=png

公共数据集推动了机器学习研究的飞速发展(h/t Andrew Ng),但是仍然很难将这些数据集简单地放入机器学习的pipeline中。每个研究人员都要经历编写一次性脚本的痛苦,以便下载和准备他们使用的每个数据集,这些数据集都有不同的源格式和复杂性。以后不会再这样了。

今天,我们很高兴介绍TensorFlow的Datasets(GitHub),它将公开的公共研究数据集作为 tf.data.Datasets,并且作为NumPy数组。它完成了所有的繁琐工作,包括获取源数据并将其准备成磁盘上的通用格式,它使用了 tf.data API来构建高性能的输入pipeline,这为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)

tfds.load 和 DatasetBuilder

每个数据集都公开为一个DatasetBuilder,需要知道:

  • 从何处下载数据,以及如何提取数据并将其写入标准格式( DatasetBuilder.download_and_prepare)。

  • 如何从磁盘加载它( DatasetBuilder.as_dataset)。

  • 所有关于数据集的信息,如所有特征的名称、类型和形状、每个分割中的记录数量、源url、数据集或相关论文的引用等( 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完成上述所有操作。 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)

你还可以轻松地从 tfds.load中获取 DatasetInfo 对象。通过传递 with_info=True来加载。所有有关选项,请参见API文档。

数据集版本控制

每个数据集都有版本控制(' build .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)

请参阅关于添加数据集的文档中的dataset configuration。

文本数据集和词汇表

由于不同的编码和词汇表文件,使用文本数据集常常很困难。 tensorflow-datasets让它变得容易得多。它附带了很多文本任务,包括三种TextEncoders,都支持Unicode:

  • 字节/字符级编码的 ByteTextEncoder

  • 用于基于词汇表文件的单词级编码

  • 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 Datasets都将在未来进一步改进对文本的支持。

开始

我们的文档站点是开始使用 tensorflow-datasets的最佳位置。下面是一些额外的建议:

  • Datasets page

  • API docs

  • Colab tutorial

  • How to add a dataset

  • GitHub

我们希望在接下来的几个月里增加数据集,我们希望社区也能加入进来。打开一个GitHub Issue来请求一个数据集,投票决定下一步应该添加哪个数据集,讨论实现,或者请求帮助。添加一个流行的数据集来贡献给社区,或者如果你有自己的数据,将它贡献给TFDS,使你的数据出名!

640?wx_fmt=png— END—

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

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值