通俗易懂的卷积神经网络教程-第二讲

先回忆第一讲的内容

  我们通过把图片数字化,变成一个个的小点,再把小点点给拉成一行,变成自变量。然后我们把图片中的数字作为标签,也就是因变量,我们设定一张图片有10个因变量,这十个变量值是01的数字,如果是某位置x1,那么这个图片中的数字就是x-1

  如果有6W张图,我们会得到6W组这样的变量,这样的变量就是我们输入到卷积神经网络中的输入变量。最后我们会得到一个自变量、标签的表格:

1

自变量1

X_1,1

X_1,2

...

X_1,784

自变量2

X_2,1

X_2,2

...

X_2,784

...

...

...

...

...

自变量6W

X_6W,1

X_6W,2

...

X_6W,784

  表中,X_a,b指的是第a张图中的第b个自变量。

2

标签1

Y_1,1

Y_1,2

...

Y_1,10

标签2

Y_2,1

Y_2,2

...

Y_2,10

...

...

...

...

...

标签6W

Y_6W,1

Y_6W,2

...

Y_6W,10

  表中,Y_a,b指的是第a张图中的第b个标签。

  我们把这些数据带入到CNN中,就可以开始正向传播了。正向传播分为三个步骤,第一个步骤是卷积、第二步骤是池化、第三步骤是BP网络全连接。前两部也可以分为多步来解决问题,如:“输入数据->卷积1-->池化1->卷积2-->池化2->...->卷积n->池化n->BP网络->输出数据”的形式。

      那么我先说一下怎么卷积,我们导入了表1和表2两组数据。首先我们来搞1

(1)我们选取1中的一行,然后把这行的数据还原成28*28的一个矩阵:


  有人会说,刚才给拉成一行了,这回又还原了是不是傻啊,脱裤子放屁多此一举嘛!你说的对,确实多此一举。但是你既然能够想到这一点,就说明你第一讲的内容掌握的不错,也就是说我写得文章你看懂了,说明我的讲解奏效了。其实它还有一个作用,我们图片输入进去是一个个的变量,6W组图片就6W组变量,东西太乱了,如果给拉成一行,然后所有数据合并成一组变量,也就是表1,那么看起来是不是也很简洁呢?

(2)还原之后呢,我们随机生成6组滤波器矩阵,每一个矩阵是一个5*5的矩形表格,每一个表格里面都有一个数据,这些数据是随机生成的的值wij每个滤波器我们在设定一个偏置量值bk6组就一共有6个偏置量。



(3)然后我们用刚刚从表1拿出来的第一组自变量与第一个滤波器做卷积运算。这个与我们第一节讲的卷积有些不同,我们不再最前面添加0,而是直接从第一个小点开始,我们把5*5的滤波器与自变量矩阵最前面的五行五列对齐,也就是把滤波器放到红色的位置:


(4)后我们把自变量小格和滤波器对应的位置相乘,如第一个小格与滤波器的第一个值就乘积是X1*W11,第二个乘积就是X2*W12,以此类推,最后一个乘积就是X117*H55。我们得到了25个乘积值,然后我们把乘积给加和,并加上偏置量b1求出D1,1=X1*W11+X2*W12+...+X117*H55+b1

(5)接下来我们把滤波器往右平移一个格子:


(6)用滤波器与红色的格子一一对应乘积并求和,并加上偏置量b1得到D1,2=X2*W11+X3*W12+...+X118*H55+b1

(7)以此类推,一个个地求解,直到到达最后一行:


(8)后我们求出与滤波器的乘积并求和,并加上偏置量b1,我们可以得到:D1,24==X24*W11+X25*W12+...+X140*H55+b1。到此为止我们求得了24D

(9)接下来我们干啥呢返回到我们最开始的对其状况,然后再往下移动一格,如图:

回到原来


接着往下移动一格


(10)然后我们按照上面的(1~9)的方法计算D2,1~D2,24,计算完成之后返回:


(11)之后向下移动一格继续计算,直到所有的D都计算完成为止,最后一个DD24,24。然后我们得到了一格新的24*24D矩阵:


(12)得到了D矩阵后,我们令这个矩阵编号为d1,然后按照(1~11)的方法,用其余的5个滤波器进行计算,其余的5个滤波器后面加的偏置量分别为b2~b5,分别得到了d2~d6。至此我们的卷积过程就完毕了,我们得到了6个卷积矩阵。

(13)我们得到这些所有卷积矩阵之后,我们把得到的所有的值sigmoid一下,给它搞到0~1之间的一个数。这个函数这么写:

其中x指的是矩阵中的每一个值。

  如果大家还是没看懂的话,请看下面的图图,图中上面的是得到的新矩阵d,下面是原始的自变量矩阵,自变量矩阵变成深颜色就是与滤波器贴合到了一块:

 

  这一步骤用图像流程图表示是这样的,我们的长度宽度变小了,但是高度变大了(从1变到了6):

 

     看完这张图想必大家对卷积运算的过程就十分地清晰了吧?如果可以我们进行下一步,池化计算。

 池化计算和我们第一节讲的一样,设定一个采样器a,比如我们的大小设置为2*2=4,那么我们怎么采样呢,首先我们选取d矩阵的其中之一,比如d1:


(1)我们从左侧头部开始,用采样器框选上前两行两列,如红色框框所示:


(2)然后我们选取这里面的自变量【x1,x2,x25,x26】这四个变量中最大值的一个,比如说最大值是x2,那么我们舍弃其它的变量并令p1,1=x2

(3)接下来我们把采样器向右移动一次,这次和刚才卷积可不是一样的了,我们这一次的移动一次是按照采样器a的大小来移动的,因为采样器的列数为2,所以向右移动2个小格:


(4)接下来我们选取这四个变量【x3,x4,x27,x28】的最大值,比如说最大值是x27,那么我们舍弃其他的变量并令p1,2=x27

(5)就这样移动,一直移动到末尾,我们会求得12p变量,最后一个变量是p1,12。求完之后,我们返回最初的状态:


  并向下移动一次,因为a的行数是2,那么我们向下移动2个小格子:


(6)我们再求一下这次的四个变量【x29,x30,x53,x54】的最大值,假设x53是最大值,那么令p2,1=x53

(7)我们按照(1~6)的方法一直遍历,直到我们的红色小框圈到最后四个自变量为止,这样我们就得到了144p值,最后一个pp12,12


(8)我们令这个矩阵为P1,按照同样的方法,我们求出其余6个矩阵的池化结果P2~P6。于是我们得到了612*12的矩阵。

这个过程我们可以用图文来进行描述,就是把刚才的矩阵缩小一倍:

 

  我们池化之后,正向传播就完成一半了,接下来就是把这612*12的矩阵再进行卷积、池化一次。

  怎么再进行呢?问的好!我们把这6个新矩阵的看成一个整体P1拿出来,后随机生成125*5*5*5*5*5的新滤波器,然后我们用这个P1矩阵与这12个滤波器做卷积,我们会得到128*8的矩阵,我们起名为DD。如图所示:

 

  接着,我们设定一个采样器aa,大小为2*2=4,然后我们对12个矩阵每一个进行采样,就会得到新的12个矩阵PP1~PP12,大小为4*4,如图所示:

 

  我们这两次计算完成之后,我们已经把矩阵的长宽压缩的很小很小了,我们下一步不需要再进行卷积池化了。我们直接用BP神经网络进行全连接就好了。至于怎么全连接呢,请听下回分解。

 

下一节讲正向传播中:全连接、标签及目标函数的计算。


————————————————

如果对我的课程感兴趣的话,欢迎关注小木希望学园-微信公众号: 

mutianwei521

也可以扫描二维码哦!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值