卷积神经网络(CNN)详细介绍及其原理详解(二)

接上一文继续;

五、全连接层

假设还是上面人的脑袋的示例,现在我们已经通过卷积和池化提取到了这个人的眼睛、鼻子和嘴的特征,如果我想利用这些特征来识别这个图片是否是人的脑袋该怎么办呢?

此时我们只需要将提取到的所有特征图进行“展平”,将其维度变为1 × x 1×x1×x,这个过程就是全连接的过程。

也就是说,此步我们将所有的特征都展开并进行运算,最后会得到一个概率值,这个概率值就是输入图片是否是人的概率,这个过程如下所示:

卷积神经网络(CNN)详细介绍及其原理详解(二)_第1张图片

单看这个过程可能还是不太清晰,所以我们可以把之前的过程与全连接层结合起来,如下图所示:


卷积神经网络(CNN)详细介绍及其原理详解(二)_第2张图片

可以看到,经过两次卷积和最大池化之后,得到最后的特征图,此时的特征都是经过计算后得到的,所以代表性比较强,最后经过全连接层,展开为一维的向量,再经过一次计算后,得到最终的识别概率,这就是卷积神经网络的整个过程。

六、输出层

卷积神经网络的输出层理解起来就比较简单了,我们只需要将全连接层得到的一维向量经过计算后得到识别值的一个概率,当然,这个计算可能是线性的,也可能是非线性的。

在深度学习中,我们需要识别的结果一般都是多分类的,所以每个位置都会有一个概率值,代表识别为当前值的概率,取最大的概率值,就是最终的识别结果。

在训练的过程中,可以通过不断地调整参数值来使识别结果更准确,从而达到最高的模型准确率。

卷积神经网络(CNN)详细介绍及其原理详解(二)_第3张图片

七、回顾整个过程

卷积神经网络最经典的应用莫过于手写数字识别了,比如我现在手写一个数字8,那么卷积神经网络是如何识别出来的呢?整个识别的过程如下图所示:

卷积神经网络(CNN)详细介绍及其原理详解(二)_第4张图片

1. 将手写数字图片转换为像素矩阵

2. 对像素矩阵进行Padding不为0的卷积运算,目的是保留边缘特征,生成一个特征图

3. 对这个特征图使用六个卷积核进行卷积运算,得到六个特征图

4. 对每个特征图进行池化操作(也可称为下采样操作),在保留特征的同时缩小数据流,生成六个小图,这六个小图和上一层各自的特征图长得很像,但尺寸缩小了

5. 对池化操作后得到的六个小图进行第二次卷积运算,生成了更多的特征图

6. 对第二次卷积生成的特征图进行池化操作(下采样操作)

7. 将第二次池化操作得到的特征进行第一次全连接

8. 将第一次全连接的结果进行第二次全连接

9.将第二次全链接的结果进行最后一次运算,这种运算可能是线性的也可能是非线性的,最终每个位置(一共十个位置,从0到9)都有一个概率值,这个概率值就是将输入的手写数字识别为当前位置数字的概率,最后以概率最大的位置的值作为识别结果。

可以看到,右侧上方是我的手写数字,右侧下方是模型(LeNet)的识别结果,最终的识别结果与我输入的手写数字是一致的,这一点从图片左边最上边也可以看到,说明此模型可以成功识别手写数字

由于本人水平有限,有错的地方还望读者指正,谢谢大家!

你可能感兴趣的:(Pytorch,cnn,深度学习,人工智能)