\n\n吴恩达说过,公共数据集为机器学习研究这枚火箭提供了动力,但将这些数据集放入机器学习管道就已经够难的了。编写供下载的一次性脚本,准备他们要用的源格式和复杂性不一的数据集,相信这种痛苦每个程序员都有过切身体会。
\n
\n\n但现在,你再也不会被这种痛苦困扰了。谷歌今天开源了一个机器学习数据集,可在TensorFlow直接调用,这为开发人员省去了不少麻烦。
\n
照例先放数据集:
\nGitHub: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亿数据的语言模型基准和大型电影评论数据集,并将在未来几个月推出更多数据集;我们也希望你可以加入并贡献数据集。
\ntl;dr
\n# Install: pip install tensorflow-datasets\nimport tensorflow_datasets as tfds\nmnist_data = tfds.load(\u0026quot;mnist\u0026quot;)\nmnist_train, mnist_test = mnist_data[\u0026quot;train\u0026quot;], mnist_data[\u0026quot;test\u0026quot;]\nassert isinstance(mnist_train, tf.data.Dataset)\n
\n
在Colab notebook 上试试 tfds。
\n \n每个数据集都作为DatasetBuilder公开,它会告诉你:
\n- \n
- 从哪里下载数据以及如何提取数据并将其写入标准格式(DatasetBuilder.download_and_prepare)。\n
- 如何从磁盘加载它(DatasetBuilder.as_dataset)。\n
- 以及有关数据集的所有信息,例如所有要素的名称、类型和形状,每个拆分中的记录数、源URL、数据集或相关论文的引用等(DatasetBuilder.info)。\n
你可以直接对所有DatasetBuilders进行实例化或使用tfds.builder字符串获取:
\nimport tensorflow_datasets as tfds\n\n# Fetch the dataset directly\nmnist = tfds.image.MNIST()\n# or by string name\nmnist = tfds.builder('mnist')\n\n# Describe the dataset with DatasetInfo\nassert mnist.info.features['image'].shape == (28, 28, 1)\nassert mnist.info.features['label'].num_classes == 10\nassert mnist.info.splits['train'].num_examples == 60000\n\n# Download the data, prepare it, and write it to disk\nmnist.download_and_prepare()\n\n# Load data from disk as tf.data.Datasets\ndatasets = mnist.as_dataset()\ntrain_dataset, test_dataset = datasets['train'], datasets['test']\nassert isinstance(train_dataset, tf.data.Dataset)\n\n# And convert the Dataset to NumPy arrays if you'd like\nfor example in tfds.as_numpy(train_dataset):\n image, label = example['image'], example['label']\n assert isinstance(image, np.array)\n
\n
as_dataset()接受一个batch_size参数,它将提供批量示例,而不是一次一个示例。对于适合内存的小型数据集,你可以用batch_size = -1立即获取整个数据集作为tf.Tensor。使用tfds.as_numpy()可以轻松地将所有tf.data.Datasets转换为NumPy数组的参数。
\n为方便起见,你可以使用tfds.load执行以上所有操作,tfds.load按名称获取DatasetBuilder,调用download_and_prepare()以及as_dataset()。
\nimport tensorflow_datasets as tfds\n\ndatasets = tfds.load(\u0026quot;mnist\u0026quot;)\ntrain_dataset, test_dataset = datasets[\u0026quot;train\u0026quot;], datasets[\u0026quot;test\u0026quot;]\nassert isinstance(train_dataset, tf.data.Dataset)\n
\n
你也可以通过传递with_info = True轻松地从tfds.load获取DatasetInfo对象。有关所有选项,请参阅API文档。
\n数据集版本管理
\n每个数据集都是版本化的(builder.info.version),你大可放心,数据不会随意发生变化,且结果是可重现的。目前,我们保证如果数据发生变化,将增加版本。
\n请注意,尽管目前我们保证给定同一版本下的数据值和拆分是相同的,但不保证对同一版本的记录进行排序。
\n数据集配置
\n具有不同变体的数据集使用命名的BuilderConfigs进行配置。例如,大型电影评论数据集(tfds.text.IMDBReviews )不同的输入可能有不同的编码(例如,纯文本、字符编码或子词编码)。内置配置与数据集文档一起列出,可以通过字符串进行寻址,也可以传入你自己的配置。
\n# See the built-in configs\nconfigs = tfds.text.IMDBReviews.builder_configs\nassert \u0026quot;bytes\u0026quot; in configs\n\n# Address a built-in config with tfds.builder\nimdb = tfds.builder(\u0026quot;imdb_reviews/bytes\u0026quot;)\n# or when constructing the builder directly\nimdb = tfds.text.IMDBReviews(config=\u0026quot;bytes\u0026quot;)\n# or use your own custom configuration\nmy_encoder = tfds.features.text.ByteTextEncoder(additional_tokens=['hello'])\nmy_config = tfds.text.IMDBReviewsConfig(\n name=\u0026quot;my_config\u0026quot;,\n version=\u0026quot;1.0.0\u0026quot;,\n text_encoder_config=tfds.features.text.TextEncoderConfig(encoder=my_encoder),\n)\nimdb = tfds.text.IMDBReviews(config=my_config)\n
\n
请参阅有关添加数据集的文档中有关数据集配置的部分。
\n文本数据集和词汇表
\n由于编码和词汇文件不同,文本数据集通常很难处理。tensorflow-datasets让这一过程变得更简单。它包含许多文本任务,包括三种TextEncoders,且都支持Unicode:
\n- \n
- ByteTextEncoder用于字节/字符级编码\n
- TokenTextEncoder用于基于词汇表文件的单词级编码\n
- SubwordTextEncoder用于子词级编码(以及针对特定文本语料库创建子词词汇的能力),可以字节级回退,因此它是完全可逆的。例如,“hello world”可以拆分为[“he”,“llo”,“”,“wor”,“ld”],然后进行整数编码。子词是词级和字节级编码之间的媒介,在一些自然语言研究项目中很受欢迎。\n
可以通过DatasetInfo访问编码器及其词汇表大小:
\nimdb = tfds.builder(\u0026quot;imdb_reviews/subwords8k\u0026quot;)\n\n# Get the TextEncoder from DatasetInfo\nencoder = imdb.info.features[\u0026quot;text\u0026quot;].encoder\nassert isinstance(encoder, tfds.features.text.SubwordTextEncoder)\n\n# Encode, decode\nids = encoder.encode(\u0026quot;Hello world\u0026quot;)\nassert encoder.decode(ids) == \u0026quot;Hello world\u0026quot;\n\n# Get the vocabulary size\nvocab_size = encoder.vocab_size\n
\n
TensorFlow和TensorFlow数据集都将在未来进一步改进文本支持。
\n入门
\n我们的文档站点是开始使用tensorflow数据集的最佳位置。以下是一些入门指南:
\n \n我们将在未来几个月内添加更多数据集,并希望社区能够加入。如果你需要什么数据集,请在GitHub 创建话题,我们将对下一步应添加的数据集进行投票,讨论实施细节或寻求帮助。非常欢迎Pull Requests!人人献出一点数据集,让社区变得更美好,把你的数据集贡献给TFDS声名大噪吧!
\n当获取数据变得简单,我们就能快乐地建模!
\n原文链接:
\nhttps://medium.com/tensorflow/introducing-tensorflow-datasets-c7f01f7e19f3