CNN原理真是小儿科?

走远了吗. 提交于 2020-03-10 22:08:41

流程

CNN 一般涉及 卷积 ,池化 ,单位化,激活函数 。 其中卷积 已经介绍。

在这里插入图片描述

池化(Pooling)

CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。池化背后的数学顶多也就是小学二年级水平。它就是将输入图像进行缩小,减少像素信息,只保留重要信息。通常情况下,池化都是22大小,比如对于max-pooling来说,就是取输入图像中22大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(注:同理,对于average-pooling来说,就是取2*2大小块的平均值作为结果的像素值。)

对于本文的这个例子,池化操作具体如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

不足的外面补"0":

在这里插入图片描述
在这里插入图片描述

经过最大池化操作(比如2*2大小)之后,一幅图就缩小为原来的四分之一了:
在这里插入图片描述

然后对所有的feature map执行同样的操作,得到如下结果:

在这里插入图片描述

因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。

当对所有的feature map执行池化操作之后,相当于一系列输入的大图变成了一系列小图。同样地,我们可以将这整个操作看作是一个操作,这也就是CNN中的池化层(pooling layer),如下:

在这里插入图片描述

通过加入池化层,可以很大程度上减少计算量,降低机器负载。

Normalization

在这里插入图片描述
将值都变成 0—1 之间 负值 变成 0 。

激活函数Relu (Rectified Linear Units)

这是一个很小但是很重要的操作,叫做Relu(Rectified Linear Units),或者修正线性单元。它的数学公式也很简单:
![][01]
[01]:http://latex.codecogs.com/png.latex?f(x)%20=%20max(0,%20x)

对于输入的负值,输出全为0,对于正值,原样输出

下面我们看一下本文的离例子中relu激活函数具体操作:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最后,对整幅图操作之后,结果如下:

在这里插入图片描述

同样地,在CNN中,我们这一系列操作视为一个操作,那么就得到Relu Layer,如下

在这里插入图片描述

CNN

最后,我们将上面所提到的卷积,池化,激活放在一起,就是下面这个样子
在这里插入图片描述

然后,我们加大网络的深度,增加更多的层,就得到深度神经网络了:

在这里插入图片描述

全连接层(Fully connected layers)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据结果判定为"X":

在这个过程中,我们定义这一系列操作为”全连接层“(Fully connected layers):
在这里插入图片描述

全连接层也能够有很多个,如下:

在这里插入图片描述

在这里插入图片描述

这一整个过程,从前到后,被称作”前向传播“,得到一组输出,然后通过反向传播来不断纠正错误,进行学习

反向传播 (Backpropagation)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

所以刚开始 可以随机假设 N 个 feature 这些feature 可以是随机值 后面会根据 数据 ,不断的修正这些 feature . 来了一个新图 用 这些 feature 去预测 这个东西 。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!