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

大家好,我是小木,小木课堂又开课了o(_)o

  哈哈,今天我要讲的是卷积神经网络(CNN Convolutional Neural Network)。看这个名字,卷积神经网络(CNN),好TMD高大上啊,听起来挺唬人的,其实也就那么回事儿,当初我讲过深度信念神经网络(DBN),也讲过生成式对抗网络(GAN),这都是深度学习中的算法。这些东西说实话差不了多少,都是BP的改进。要说CNN是谁发明的,这里的争议比较大,我就不说了。它能干啥呢,很多呀,比如说它可以做图像识别啦、语音识别啦。

其实,卷积神经网络CNN说白了也就是在BP神经网络中加入卷积运算的一种处理数据的方法罢了。

什么叫卷积运算呢?

       问的好!我现在就来给大家讲一下:

  我们假设有5个原始数据,分别是:

X1

X2

X3

X4

X5

  但我们嫌这5个数据不爽,我们不想要,于是我们创造了两个滤波器H1H2

因为我们不想要这5个数据,所以我们要让这些数据与滤波器做一些运算得到更好的数据。这样的运算就叫做卷积。

扫描二维码关注公众号,回复: 771857 查看本文章

那么怎么运算呢,如果我们新得到的数据的数量仍然保持5个不变,

那么我们第一步应该把原始数据的开头和末尾加上0变成:

0

X1

X2

X3

X4

X5

0

  第二步,我们让H1H2分别和0X1做乘积得到H1*0H2*X1,并作和得到D1=H1*0+H2*X1=H2*X1

  第三步,我们把H1H2往右移动一个格子,分别和X1X2做乘积,然后加和,得到D2=H1*X1+H2*X2

  同理,把H1H2再往右移动一个格子,分别和X2X3做乘积,然后加和,得到D3=H1*X2+H2*X3。以此类推得到D4=H1*X3+H2*X4D5=H1*X4+H2*X5D6=H1*X5+H2*0=H1*X5

  这样卷积运算就完成了,我们得到了D1~D66个数据。如果大家看文字还是很懵B,那么请看下面的图就一目了然了:

 

1:卷积运算

       卷积我们讲完了,现在我们再看卷积运算时候,是不是就像当范伟坐在轮椅上时候回答赵本山问题的感觉呀?是的话继续往下看。

  除了卷积运算以外,CNN中还有一种算法叫做池化(pooling听名字感觉太TMD的坑了,范伟又从轮椅上面站起来了。其实别怕,这个更是一个四岁小孩儿的脑筋急转弯,一只纸老虎。

  刚才不是得到了6D1~D6了么,对,如下:

D1

D2

D3

D4

D5

D6

  池化是啥意思呢,就是筛选数据,怎么筛选呢,我们要定义一个叫做采样器的东西,这个听起来又213了,不知道是啥,别管它是啥,我们先假定采样器的参数值a2可以吧。

  那么,我们把6个数据分为6/a=6/2=3组,分组规则是从左到右依次读取:第一组是[D1,D2],第二组是[D3,D4],第三组是[D4,D5]

  然后我们选择每组最大的数据,假设第一组是D2>D1,第二组是D4>D3,第三组是D6>D5。那么我们舍弃D1,D3,D5保留三个最大的数据D2,D4,D6

D2

D4

D6

        这样的过程我们就叫做池化。纸老虎吧,名字高大上其实都是坑货,如果还是不清晰,看下面这个图。

 

2:池化

        现在呢,卷积池化的概念讲解完成了,如果像当范伟坐在轮椅上时候回答问题的感觉,那么我们就再继续。

        我们讲完两个概念之后,就可以进入卷积神经网络CNN的讲解过程中了,一般别人都是开始就讲解的是正向传播。我不这样做,在讲正向传播之前,我还是要继续说一下我们放入卷积神经网络中的数据,也叫做输入数据(包括自变量及标签),自变量就是刚才我们说的X,而标签就是因变量Y

   由于CNN解决的问题通常是人工智能,那么我们需要大量数据、大量因素的分析和处理,那么数据就不可能是只有几个,应该是成千上万组的数据!因素就不可能只有X1~X5五个自变量的数据了,应该是好几百个!

   我们假定有6W28*28的数字图片,假定CNN要做的事情是识别这些图片里面的数字是几。

 

3:100张数字图片

  这些图片中,每一个图片都有一个数字,上图中共有100张图片。这些图片我们还得继续思考。首先我们看图片有什么特点?你猜?

       猜不出来我告诉你,这些图每个图中都有数字,是数字图片(废话,不是刚刚说完?),而每一个数字图片都是一个灰度图

 

   啥意思?比如其中的一张图,就拿0这张举例,它是一个28*28的图片,也就是说他横向有28个点,纵向它也有28个点。我们把这些点编号,用表格表示为:

1

2

...

28

29

30

...

56

...

...

...

...

757

...

...

784

   每一个编号中它有一个数字,表示这个小格子的颜色,0代表的是黑色,255代表的是白色,而介于0~255中间的颜色是黑色一点点渐变到白色的灰色。这784个点有序的排列组成了0图片,这样的图就叫做灰度图。

   我们把这些小点都作为自变量,我们就得到了x1~x784,共784个自变量。而这些自变量你也发现了它是一个矩形的表格,而不是我们刚才X1~X5的一个长条形。那么我们就需要做一些处理,处理的方式就是把第二行的数据搬到第一行末尾,第三行搬到第二行末尾,以此类推,形成一个长条形的表格。

X1

X2

...

X28

X29

...

X784

   做完长方形表格之后,我们的自变量就创造成功了,那么标签呢?更简单了,什么叫标签?说白了就是因变量Y,就是说这个图中的数字到底是几?那么怎么表示这个数字是几呢?我们想数字一共就0~910个,那么我们做一个1*10的表格可不可以,然后每一个表格中有一个数字,数字是0或者是10表示不是这个数字,1表示是这个数字。于是一个表格就出现了:

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Y8

Y9

Y10

   一共因变量共有十个,如果是上面的图,数字是0,那么第一个格子中就是1,其余的就是0,可以写成:

1

0

0

0

0

0

0

0

0

0

       这样,我们一张图已经做完了,

       这张图最后的形式就是:

自变量

X1

X2

...

X784

 

标签

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Y8

Y9

Y10

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

 

自变量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个自变量。

标签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中就可以开始下一步正向传播了。

 

第一课就讲到这里,第二节课讲正向传播

 

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

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

mutianwei521

也可以扫描二维码哦!

 


猜你喜欢

转载自blog.csdn.net/u013631121/article/details/80275596