将图像输入批次扁平化为CNN
欢迎回到这个神经网络编程系列。在这篇文章中,我们将可视化一个单一灰度图像的张量扁平化操作,并且我们将展示如何扁平化特定的张量轴,这在使用CNN时通常是必需的,因为我们处理的是输入批次,而不是单个输入。
让我们开始吧。
扁平化整个张量
张量的扁平化操作是卷积神经网络中的常见操作。这是因为卷积层的输出在传递到全连接层之前必须被扁平化。
在之前的文章中,我们学习了张量的形状以及重塑操作。扁平化操作是一种特定类型的重塑操作,其中所有的轴都被_压缩_或_合并_在一起。
为了扁平化一个张量,我们至少需要两个轴。这使得我们从尚未扁平的东西开始。现在让我们看看一个手写的来自MNIST数据集的数字8图像。这个图像具有2
个不同的维度,高度_和_宽度。
高度和宽度分别是18 x 18
。这些维度告诉我们这是一个裁剪后的图像,因为MNIST数据集包含28 x 28
的图像。现在让我们看看这两个轴的高度和宽度如何被扁平化为长度为324
的单一轴。
上面的图像展示了我们扁平化的输出,具有长度为324
的单一轴。边缘的白色对应于图像顶部和底部的白色。
在这个例子中,我们扁平化了整个张量图像,但如果我们只想扁平化张量内的特定轴呢?这在使用CNN时通常是必需的。
让我们看看我们如何在代码中扁平化张量的特定轴,使用PyTorch。
扁平化张量的特定轴
在关于CNN输入张量形状的文章中,我们学习了卷积神经网络的张量输入通常具有4
个轴,一个用于批次大小,一个用于颜色通道,每个用于高度和宽度。
(批次大小,通道,高度,宽度)
让我们从这里开始,构建一个符合这些规格的张量。首先,假设我们有以下三个张量。
构建图像批次的张量表示
t1 = torch.tensor([
[1,1,1,1],
[1,1,1,1],
[1,1,1,1],
[1,1,1,1]
])
t2 = torch.