卷积神经网络
在这个神经网络编程系列中,我们正在努力构建卷积神经网络(CNN),所以让我们看看在CNN中的张量输入。
在前两篇文章中,我们介绍了张量和张量的基本属性——阶、轴和形状。如果你还没看过那些帖子,我强烈建议你去看看。
我现在要做的是把阶、轴和形状的概念用在一个实际的例子中。为此,我们将把图像输入看作CNN的张量。
卷积神经网络是图像识别任务的首选网络,因为它非常适合于检测空间图案(spacial patterns)。
注意,张量的形状 编码了关于张量轴、阶和索引的所有相关信息,因此我们将在示例中考虑该形状,这将使我们能够计算出其他值。下面开始详细讲解。
CNN输入的形状
CNN输入的形状通常长度为4。这意味着我们有一个4阶张量(有四个轴的)。张量形状中的每个指标代表一个特定的轴,每个指标的值给出了对应轴的长度。
张量的每个轴通常表示输入数据的某种物理含义(real world)或逻辑特征。如果我们了解这些特征中的每一个以及它们在张量中的轴位置,那么我们就可以对张量数据结构有一个很好的总体理解。
为了分解这个,我们将从后往前推敲,考虑从右到左的轴。记住,最后一个轴,也就是我们要开始的轴,是实际数字或数据值所在的轴。
如果我们沿着最后一个轴运行,停下来检查一个元素,我们将看到一个数字。如果我们沿着任何其他轴运行,元素是多维数组。
对于图像而言,原始数据以像素的形式出现,像素由数字表示,并使用两个维尺寸(高度和宽度)进行排列。
图片的高和宽
为了表示两个维度,我们需要两个轴。
图像的高度和宽度在最后两个轴上表示。可能的值是28 x 28,就像我们将在CNN项目中使用的fashion-MNIST数据集中的图像数据一样,或是VGG16神经网络使用的224 x 224图像大小,或者我们可以想象的其他图像尺寸。
图片的颜色通道(Image Color Channels)
下一个轴(第二个轴)代表颜色通道。对于RGB图像,此处的通常值为3;如果使用灰度图像,则通常值为1。此颜色通道的解释仅适用于输入张量。
稍后我们将揭示,在张量通过卷积层之后,解释此轴会发生变化。
到现在为止,使用最后三个轴,我们已将完整图像表示为张量。我们使用三个轴以张量形式排列了颜色通道以及高度和宽度。
就访问数据方面而言,我们需要三个索引。我们选择颜色通道,高度和宽度以获取特定的像素值。
图片批次(Image Batches)
这将引出四个轴中的第一个轴,用来代表批次大小。在神经网络中,我们通常都是批量处理样本,而不是只处理单个样本,因此该轴的长度告诉我们该批次中有多少个样本。
这使我们看到可以使用一个4阶张量表示一整个批次的图片。
假设对于给定的张量,我们具有以下形状[3,1,28,28]。使用该形状,我们可以确定我们有这个批次是含有三张图片。
[Batch, Channels, Height, Width]
每张图片都有一个颜色通道,图像的高度和宽度分别为28 x 28。
- 批次大小(Batch size)
- 色彩通道(Color channels)
- 高度(Height)
- 宽度(Width)
这个给了我们一个4阶张量,该张量最终将流向卷积神经网络。
给定一个代表一批图片的张量(类似于上面),我们能使用四个索引定位到一批图片中特定图片的特定通道的特定像素值。
输出通道和特征图
让我们看一下在通过卷积层转换后,张量颜色通道轴是如何变化的解释。
假设我们有一个张量,其中包含来自单张28 x 28灰度图片的数据。这为我们提供了以下张量形状:[1,1,28,28]。
现在,假设此图像传递到我们的CNN并通过第一个卷积层。发生这种情况时,卷积操作将改变张量的形状和基础数据。
卷积操作会改变高度和宽度尺寸以及通道数。输出通道的数量是根据卷积层中使用的滤波器的数量而变化。
假设我们有三个卷积滤波器,让我们看看通道轴发生了什么。
由于我们有三个卷积滤波器,因此我们将从卷积层获得三个通道输出。这些通道是卷积层的输出,因此命名为输出通道而不是颜色通道。
三个滤波器中的每一个都对原始的单个输入通道进行卷积,从而产生三个输出通道。输出通道仍由像素组成,但是像素已通过卷积操作进行了修改。根据滤波器的大小,输出的高度和宽度尺寸也会发生变化,但是我们将在以后的文章中讨论这些细节。
特征图(Feature Maps)
对于输出通道,我们不再拥有颜色通道,而是修改过的通道,我们称之为feature maps。这些所谓的特征图是使用输入颜色通道和卷积过滤器进行卷积的输出。
Feature maps are the output channels created from the convolutions.
之所以使用“特征”这个词,是因为输出代表了图片的特定特征,比如边缘,这些映射是在网络在训练过程中学习的过程中出现的,并且随着我们深入网络而变得更加复杂。
总结
现在我们应该很好地理解了CNN输入张量的整体形状,以及阶、轴和形状的概念是如何应用。
当我们开始构建CNN时,我们将在以后的文章中加深对这些概念的理解。在那之前,我们下期再见!
文章中内容都是经过仔细研究的,本人水平有限,翻译无法做到完美,但是真的是费了很大功夫,希望小伙伴能动动你性感的小手,分享朋友圈或点个“在看”,支持一下我 ^_^
英文原文链接是:
https://deeplizard.com/learn/video/k6ZF1TSniYk