共计 3196 个字符,预计需要花费 8 分钟才能阅读完成。
- 摘要
本系列分享咱们将一起了解 MindSpore 官网中展现的 MNIST 图片数据集分类我的项目。此我的项目中应用的是 LeNet 卷积神经网络,卷积神经网络 (convolutional neural network) 是含有卷积层 (convolutional layer) 的神经网络,卷积神经网络均应用最常见的二维卷积层,常常用于解决图像数据的我的项目中。在 LeNet 网络中,可分为卷积模块和全连贯输出模块。本次咱们将介绍卷积计算的工作原理。
- 二维相互关运算
首先理解一下卷积核数组在输出数组中的计算形式,尽管卷积层得名于卷积 (convolution) 运算,但咱们通常在卷积层中应用更加直观的相互关 (cross-correlation) 运算。在二维卷积层中,一个二维输出数组和一个二维核 (kernel) 数组通过相互关运算输入一个二维数组。
image.png
图 1:相互关运算
这里咱们设置一个高和宽均为 3 的二维输出数组。咱们能够将该数组形态记为 3×3。核数组的高和宽别离是 2。核数组在卷积计算中又称卷积核或过滤器(filter)。卷积核的高和宽决定卷积核窗口的形态,能够记为 2×2。
在二维相互关运算过程中,卷积窗口将会从输出数组的最左上方开始计算,依照从左到右,从上到下的程序,顺次在输出数组区域内滑动,这里默认状况下卷积核挪动的步幅是每次一行或一列。当卷积窗口滑动到输出数组的某一地位时,窗口中的输出子数组与核数组按元素相乘并求和,失去输入数组中相应地位的元素。二维相互关运算得出:
0×0+1×1+3×2+4×3=19
1×0+2×1+4×2+5×3=25
3×0+4×1+6×2+7×3=37
4×0+5×1+7×2+8×3=43
这就是卷积计算的过程,二维卷积层将输出数组和卷积核做相互关运算,并加上一个标量偏差来失去输入。卷积层的模型参数包含了卷积核和标量偏差。在训练模型的时候,通常咱们须要先对卷积核随机初始化,而后再一直迭代卷积核和偏差。
实际上,卷积运算与相互关运算是相似的。想要失去卷积运算的输入,咱们只需将核数组左右翻转并高低翻转,再与输出数组做相互关运算。所以,卷积运算和相互关运算尽管相似,但如果他们应用雷同的核数组和输出数组,输入也并不一定会雷同。如果卷积核数组元素在横轴和竖轴上都对称,那么卷积运算和相互关运算后果雷同。
特色图 (feature map) 是二维卷积层输入的二维数组能够看作输出空间维度上某一级的表征。影响元素 x 的前向计算的所有可能输出区域叫做 x 的感触野(receptive field)。咱们能够设置更深的卷积神经网络,那么输出数组通过每一层卷积后,高和宽会慢慢变小,特色图中单个元素的感触野就会变得更加广大,从而捕获输出上更大尺寸的特色。
- 填充和步幅
3.1 填充
填充 (padding) 是示意在输出高和宽的输出数组两侧填充元素(通常是 0 元素)。如图 2 中,咱们在输出数组的高和宽的两侧别离增加值为 0 的元素,每一边新增一层,使得输出高和宽从 3 变成 5,并导致输入高和宽从 2 变成 4。
image.png
图 2:填充后相互关运算
个别卷积状况下,假如输出数组高和宽别离是 nh、nw,卷积核数组的高和宽别离是 kh、kw,如果在输出数组高的两侧一共填充 ph 行,在宽的两侧一共填充 pw 列,那么输入数组形态将会是
(nh-kh+ph+1)×(nw-kw+pw+1)
这就证实,输入数组的高和宽会别离减少 ph 和 pw。所以,如果想要理解在结构网络时揣测每个层的输入形态。咱们能够设置 ph=kh - 1 和 pw=kw- 1 使得输出和输入具备雷同的高和宽。
3.2 步幅
步幅是指核数组在输出数组在依照从左到右,从上到下挪动过程中,每挪动一次核数组跨过的元素行数或列数。目前咱们看到的例子里,在高和宽两个方向上步幅均为 1。咱们也能够应用更大步幅。图 3 展现了在高上步幅为 3、在宽上步幅为 2 的二维相互关运算。能够看到,输入第一列第二个元素时,卷积窗口向下滑动了 3 行,而在输入第一行第二个元素时卷积窗口向右滑动了 2 列。当卷积窗口在输出上再向右滑动 2 列时,因为输出元素无奈填满窗口,无后果输入。图 3 中的暗影局部为输入元素及其计算所应用的输出和核数组元素。
image.png
图 3:设定步幅后相互关运算
一般来说,当高上步幅为 sh,宽上步幅为 sw 时,输入形态为
⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋
如果设置 ph=kh−1ph=kh−1 和 pw=kw−1pw=kw−1,那么输入形态能够示意为
⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋
更进一步,如果输出的高和宽能别离被高和宽上的步幅整除,那么输入形态将是(nh/sh)×(nw/sw)。
填充作用于输入数组的高和宽。这罕用来使输入与输出具备雷同的高和宽。
步幅能够减小输入的高和宽,例如输入的高和宽仅为输出的高和宽的 1 /n(n 为大于 1 的整数)。
- 多输出通道与多输入通道
4.1 多输出通道
咱们下面用到的输出和输入都是二维数组,然而实在的数据往往维度会更高。例如,彩 片数据集在高和宽的维度外还有 RGB(红、绿、蓝)3 个色彩通道。假如彩 像的高和宽别离是 h 和 w(像素),那么它能够示意为 3×h×w 的多维数组。咱们将大小为三的这一维称为通道(channel)维。
当输出数据含有多个通道时,咱们须要结构一个输出通道与输出数据的通道数雷同的卷积核,从而可能与含多通道的输出数据做相互关运算。假如输出数据的通道数为 ci,那么卷积核的输出通道同样为 ci。设卷积核窗口形态为 kh×kw。当 ci= 1 时。此时的卷积核是只蕴含一个形态为 kh×kw 的二维数组。当 ci>1 时,每一个输出通道各调配一个形态为 kh×kw 的核数组。Ci 个数组与输出通道维上连结,失去形态为 ci×kh×kw 的卷积核。此时卷积运算是各个通道上对二维数组和卷积核的二维数组做相互关运算,再将 ci 个通道的二维输入相加,失去一个二维数组。
上面展现的是 2 个输出通道的二维相互关计算,二维输出数组与二维核数组做相互关运算,再按通道数相加失去输入。
image.png
图 4:多输出通道相互关运算
(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56
4.2 多输入通道
通过下面多输出通道的介绍,咱们发现对各个通道的后果做累加,无论输出通道数是多少,输入通道总是 1。假如输出通道数为 ci,想要失去输入通道数为 co,咱们能够为每个输入通道别离创立形态为 ci×kh×kw 的核数组。那么此时的卷积核形态为 co×ci×kh×kw。在做相互关运算时,每个输入通道上的后果由卷积核在该通道上的核数组与整个输出数组计算得出。
1×1 卷积层是卷积窗口形态为 1×1 的多通道卷积层。因为应用了最小窗口,所以 1×1 卷积是不具备辨认高和宽维度上相邻元素形成的模式的性能。1×1 卷积次要应用在通道维度上。如图 5 所示,输出数组形态是 3×3×3,卷积核形态为 2×3×1×1,咱们失去的输入数组形态为 2×3×3。输出与输入具备雷同的高和宽。输入中的每个元素来自输出中高和宽上雷同地位的元素在不同通道之间按权重累加。假如咱们将通道维当做特色维,将高和宽维度上的元素当成数据样本,那么 1×1 卷积层的作用于全连贯层等价。
image.png
图 5:1×1 卷积相互关运算
应用多通道能够拓展卷积层的模型参数,1×1 卷积层通常是用来调整网络层之间的通道数,管制模型的复杂度。
- 总结
在卷积计算中,卷积核的应用能够检测图像的边缘,卷积层能够通过重复使用卷积核计算无效地表征部分空间。填充和步幅的次要作用是控住输出数组和输入数组的形态。在多输出通道中,通道数是不可变的,能够应用四维的卷积核数组管制多通道的输入(输入通道数×输出通道数×高×宽),如果输出通道数过多导致模型复杂度很高,能够应用 1×1 卷积层来调整输入通道,并且不会扭转高和宽。
以上是集体的一些解读,欢送大家探讨斧正。