# 4.1 从矢量到张量:图像表示
在前两章中,我们研究了涉及数字输入的机器学习任务。例如,第 2 章中的下载持续时间预测问题以单个数字(文件大小)作为输入。波士顿住房问题的输入是 12 个数字(房间数量、犯罪率等)。这些问题的共同点是,每个输入示例都可以表示为一个平面(即非嵌套)数字数组,对应于 TensorFlow.js 中的 1D 张量。在深度学习中,图像的表现方式是不同的。
我们用三维张量来表示图像。张量的前两个维度是熟悉的高度和宽度维度。第三个是色彩通道。例如,颜色通常被编码为红绿蓝(RGB)值。在这种情况下,这三种颜色中的每一种都是一个通道,所以沿第三维度的大小为 3。如果我们有一个大小为 224*224 像素的 RGB 编码彩色图像,我们可以将其表示为大小为[224,224,3]的 3D 张量。一些计算机视觉问题中的图像是非彩色的(如灰度)。如果表示为三维张量,在这些情况下,只有一个通道,张量形状为[高,宽,1](示例见图 4.1.)[63]
这种编码图像的方式为高宽通道或简称 HWC。为了对图像进行深度学习,我们经常将一组图像组合成一批,以实现高效的并行计算。批处理图像时,单个图像的维度始终是第一个维度。这与我们在第二章和第三章中把一维张量组合成成批二维张量的方法类似。因此,一批图像是 4D 张量,其四维分别是图像编号(N)、高度(H)、宽度(W)和颜色通道(C)。这种格式称为 NHWC。有一种可供选择的格式,这是由四个维度的不同顺序造成的。它被称为 NCHW。顾名思义,NCHW 将通道尺寸放在高度和宽度尺寸之前。Tensorflow.js 能够同时处理 NHWC 和 NCHW 格式。但为了保持一致性,我们在本书中只使用默认的 NHWC 格式。
# 图 4.1 在深度学习中把一个 MNIST 图像表示为张量。为了可视化,我们将 MNIST 图像从 2828 缩小到 88。该图像是灰度图像,高宽通道(HWC)形状为[8,8,1]。此图中省略了沿最后一个维度的单色通道。
# 4.1.1 MNIST 数据集
在本章中我们将重点讨论的计算机视觉问题是 MNIST[64]手写数字数据集。这是一个非常重要且经常使用的数据集,因此它通常被称为计算机视觉和深度学习的“hello world”。MNIST 数据集比您在深入学习中发现的大多数数据集都要古老和小巧。它被广泛用作示例,并经常作为新的深度学习技术的首选测试集,熟悉它还是非常重要的。
MNIST 数据集中的每个示例都是 28*28 的灰度图像(示例见图 4.1)。它们是由 10 位数字 0 到 9 的真实笔迹转换而来的。28×28 的图像尺寸足以可靠地识别这些简单的形状,尽管它比典型的计算机视觉问题中看到的图像尺寸要小。每幅图像都附有一个明确的标签,该标签指示图像实际上是十个可能的数字中的一个。正如我们在下载持续时间和波士顿住房数据集中看到的,数据分为训练集和测试集。训练集包含 60000 个图像,而测试包含 10000 个图像。MNIST 数据集〔65〕大致平衡,就是说十个类别(即十个数字)大约有相等数目的例子。