# 6.1 数据
大量数据的广泛可用性是导致今天机器学习革命的一个主要因素。如果不容易获得大量高质量的数据,机器学习的急剧增长就不会发生。数据集现在可以在整个互联网上使用,可以在像Kaggle和OpenML等网站上自由共享,还可以提供最先进的性能基准。“挑战”数据集的可用性推动了机器学习的许多整个分支,为社区设置了一个标准和一个共同的基准[94]。如果说机器学习是我们这一代人的太空竞赛,那么数据显然就是我们的火箭燃料;它是强大的、有价值的、不稳定的,而且对于一个正常工作的ML系统来说绝对是至关重要的。更不用说被污染的数据,比如被污染的燃料,会很快导致系统故障。
这一章是关于数据的。我们将介绍组织数据、如何检测和清除问题以及如何有效地使用数据的最佳实践。 “但我们不是一直在处理数据吗?”你可能会抗议。的确,在前几章中,我们处理过各种数据源。我们使用合成和网络摄像头图像数据集训练图像模型。我们已经使用转移学习从音频样本数据集构建了一个口语单词识别器,并且我们访问了表格数据集来预测价格,那么还有什么要讨论的呢?我们不是已经精通处理数据了吗?
回想一下前面的例子,我们的数据使用模式。我们通常需要先从远程源下载数据。然后,我们(通常)应用一些转换来将数据转换为正确的格式,例如将字符串转换为一个热词汇向量,或者将表格源的均值和方差标准化。然后,我们总是需要对数据进行批处理,并在将其连接到我们的模型之前,将其转换为以张量表示的标准数字块。在我们开始第一步训练之前。
这种下载转换批处理模式非常常见,TensorFlow.js附带了一些工具,使这些类型的操作更容易、更模块化、更不易出错。本章将介绍命名空间中的tf.data工具,最重要的是tf.data.Dataset,这些工具可用于惰性地传输数据。惰性流方法允许根据需要下载、转换和访问数据,而不是下载整个数据源并在访问时将其保存在内存中。懒惰的流式处理使处理数据源变得更加容易,这些数据源太大,无法容纳在单个浏览器选项卡中,甚至在单个计算机的RAM中太大。
我们将首先介绍tf.data.Dataset的API并演示如何配置它并将其连接到模型。然后我们将介绍一些理论和工具,帮助您回顾和探索您的数据,并解决您可能发现的问题。本章最后介绍了数据扩充,这是一种通过创建合成伪示例来扩展数据集以提高模型质量的方法。