深度学习入门基础——卷积计算

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

卷积计算

卷积是数学分析中的一种积分变换的方法在图像处理中采用的是卷积的离散形式。这里需要说明的是在卷积神经网络中卷积层的实现方式实际上是数学中定义的互相关 cross-correlation运算与数学分析中的卷积定义有所不同这里跟其他框架和卷积神经网络的教程保持一致都使用互相关运算作为卷积的定义具体的计算过程如 所示。
在这里插入图片描述

互相关计算

虽然卷积层得名于卷积convolution 运算但我们通常在卷积层中使用更加直观的互相关cross-correlation 运算。在二维卷积层中一个二维输入数组和一个二维核kernel数组通过互相关运算输出一个二维数组。我们用一个具体的例子来解释二维互相关运算的含义。如上图所示。

卷积核kernel也被叫做滤波器filter假设卷积核的高和宽分别为 k h k_h kh k w k_w kw则将称为 k h × k w k_h \times k_w kh×kw卷积比如 3 × 5 3 \times 5 3×5卷积就是指卷积核的高为3宽为5。


  • 如上图a所示左边的图大小是 3 × 3 3 \times 3 3×3表示输入数据是一个维度为 3 × 3 3\times3 3×3的二维数组中间的图大小是 2 × 2 2\times2 2×2表示一个维度为 2 × 2 2\times2 2×2的二维数组我们将这个二维数组称为卷积核。先将卷积核的左上角与输入数据的左上角(即输入数据的(0,0)位置)对齐把卷积核的每个元素跟其位置对其的输入数据中的元素相乘再把卷积相加得到卷积输出的第一个结果

                   0 × 1 + 1 × 2 + 2 × 4 + 3 × 5 = 25 0\times1 + 1\times2 + 2\times4 + 3\times5 = 25 0×1+1×2+2×4+3×5=25  (a)

图中( b ), ( c ) ,(d )计算方法与上面雷同相信聪明的大家不需要我再过多演示。

卷积核的计算过程可以用下面的数学公式表示其中 a a a代表输入图片 b b b代表输出特征图 w w w是卷积核参数它们都是二维数组。

                       b [ i , j ] = ∑ u , v a [ i + u , j + v ] ⋅ w [ u , v ] b[i,j] =\displaystyle \sum_{u,v}a[i + u, j+v]\cdot w[u,v] b[i,j]=u,va[i+u,j+v]w[u,v]

举例说明加入上图中卷积核大小是 2 × 2 2\times2 2×2 u u u可以取0和1 v v v也可以取0和1也就是说

   b [ i , j ] = a [ i + 0 , j + 0 ] ⋅ w [ 0 , 0 ] + a [ i + 0 , j + 1 ] ⋅ w [ 0 , 1 ] + a [ i + 1 , j + 0 ] ⋅ w [ 1 , 0 ] + a [ i + 1 , j + 1 ] ⋅ w [ 1 , 1 ] b[i,j] = a[i+0,j+0]\cdot w[0,0] + a[i+0,j+1]\cdot w[0,1] + a[i+1,j+0]\cdot w[1,0] +a[i+1,j+1]\cdot w[1,1] b[i,j]=a[i+0,j+0]w[0,0]+a[i+0,j+1]w[0,1]+a[i+1,j+0]w[1,0]+a[i+1,j+1]w[1,1]

我们可以验证一下它的正确性当 [ i , j ] [i,j] [i,j]取不同值的时候根据此公式计算的结果与上图的例子是否一致。

补充
在卷积神经网络中一个卷积算子除了上面描述的卷积过程之外还包括加上偏置项的操作。例如假设偏置为1则上面卷积计算的结果为
0 × 1 + 1 × 2 + 2 × 4 + 3 × 5 + 1 = 26 0\times1+1\times2+2\times4+3\times5 +1=26 0×1+1×2+2×4+3×5+1=26

0 × 2 + 1 × 3 + 2 × 5 + 3 × 6 + 1 = 32 0\times2+1\times3+2\times5+3\times6 +1=32 0×2+1×3+2×5+3×6+1=32

0 × 4 + 1 × 5 + 2 × 7 + 3 × 8 + 1 = 44 0\times4+1\times5+2\times7+3\times8 +1=44 0×4+1×5+2×7+3×8+1=44

0 × 5 + 1 × 6 + 2 × 8 + 3 × 9 + 1 = 50 0\times5+1\times6+2\times8+3\times9 +1=50 0×5+1×6+2×8+3×9+1=50

练习

学完知识后我们来做一道题进行下练习帮助我们充分掌握卷积的运算。
题目计算卷积中一共有多少次乘法和加法操作
输入数据形状是 [ 10 , 3 , 224 , 224 ] [10,3,224,224] [10,3,224,224],卷积核 k h = k w = 3 k_h = k_w = 3 kh=kw=3,输出通道数为64步幅 s t r i d e = 1 stride=1 stride=1填充 p h = p w = 1 p_h=p_w=1 ph=pw=1
则完成这样一个卷积一共需要做多少次乘法和加法操作

  • 提示
    先看输出一个像素点需要做多少次乘法和加法操作然后再计算总共需要的操作次数。

做题步骤

  1. 先考虑只有一个输入通道时候的二维卷积
    假设输出是B输入是A先计算B的一个像素点
    在这里插入图片描述
    其中一共有9个乘法8个加法操作。
    但是一般我们输入的图片都是RGB三通道的所以我们需要计算每个通道 B 00 ( c = 0 ) , B 00 ( c = 1 ) , B 00 ( c = 2 ) B^{(c=0)}_{00},B^{(c=1)}_{00},B^{(c=2)}_{00} B00(c=0),B00(c=1),B00(c=2)总共的乘法操作次数为 3 × 9 = 27 3\times9=27 3×9=27,加法操作次数为 3 × 8 = 24 3\times8=24 3×8=24次。

  2. 然后再将这些输入通道的数值相加并且加上偏置参数 b b b
    B 00 = B 00 ( c = 0 ) + B 00 ( c = 1 ) + B 00 ( c = 2 ) + b B_{00}=B^{(c=0)}_{00}+B^{(c=1)}_{00}+B^{(c=2)}_{00}+b B00=B00(c=0)+B00(c=1)+B00(c=2)+b
    由于需要额外引入3次加法操作所以最后总的加法操作次数是 24 + 3 = 27 24+3=27 24+3=27
    由此可得计算出一个像素点需要乘法操作次数是27加法操作次数也是27。

  3. 输出特征图的大小是 [ 10 , 64 , 224 , 224 ] [10,64,224,224] [10,64,224,224]则总共需要乘法操作次数是
    27 × 10 × 64 × 224 × 224 = 867041280 27\times10\times64\times224\times224=867041280 27×10×64×224×224=867041280
    加法操作次数和乘法操作次数相同都是867041280。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6