卷积神经网络图像识别_读书笔记(12)卷积神经网络CNN及应用

一、CNN算法导入

CNN∈深度学习

在前面推文我们曾介绍过两种算法在手写数字识别方面的应用:K近邻算法(KNN)和支持向量机(SVM);本期,我们介绍一种更为强大的算法来识别手写数字——卷积神经网(CNN)。卷积神经网络属于深度学习的范畴,是一种前馈型人工神经网络,已成功地应用于图像识别。说到这里,大家可能会疑惑,对于同一个分类任务,我们既然可以用机器学习的算法来做,为什么要用神经网络呢?大家回顾一下,一个分类任务,如果用机器学习算法来做,首先要明确feature和label,然后把这个数据'灌'到算法里去训练,最后保存模型,再来预测分类的准确性。但这就会出现问题,即我们需要确定好特征。如果特征数目过少,我们可能无法实现精确的分类(欠拟合);如果特征数目过多,可能会导致我们在分类过程中过于注重某个特征导致分类错误(过拟合)。然而神经网络的出现使我们不需要做大量的特征工程就可以直接把数据灌进去,让数据自己训练,自我“修正”,最终就可得到一个较好的效果。

二、CNN原理

2.1 简介

CNN和普通的神经网络具有许多相似之处,它们都是模仿人类神经的结构,由具有可学习的权重和偏置常数的神经元组成。每一个神经元可以接收输入信号,经过运算后输出每一个分类的分数。但是,CNN的输入一般是图像,卷积网络通过一系列方法,成功将数据量庞大的图像识别问题不断降维,最终使其能够被训练。CNN利用该特点,把神经元设计成具有三个维度:width(图像宽度), height(图像长度), depth(红、绿、蓝3种颜色通道)。

40f22e8871e16838ae64787b521cc5cf.png

传统神经网络(左)和卷积神经网络(右)

下面我们简单地介绍一下卷积神经网络基本结构。

2.2 CNN基本结构

卷积神经网络通常包括以下几种"层":

(1)卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。

c3d999d334f97731917efa567069240c.png

4*4 image与两个2*2的卷积核操作结果

(2)池化层(Pooling layer),即层下采样的过程,目的是为了减少特征图。通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。

6dee47e706d00fa4db56d68da93f8dc2.png

保证画质的前提下减少参数(图片尺寸3*3→2*2)

(3)全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。

62cf6fadb518a7b81c7c3e0463995e0f.png

实现最终分类

三.CNN应用—手写数字识别

上面我们了解了卷积神经网络的基本结构和工作原理,现在我们回到最开始的例子,应用CNN来实现手写数字识别。我们利用一个五层的卷积神经网络,在进行代码介绍之前,我们通过一个简洁的例子对手写识别的原理进行三维展示:

http://scs.ryerson.ca/~aharley/vis/conv/(大家可自行至该网站进行实践,通过对该3D图形进行旋转,了解其原理)。

205e7469fa8b8ddd7d43a631266bfa73.png

3.1导入所需模块

165b8b1a18edd4618f3efbf516d7a1be.png

3.2读取文件并做相应处理:

A.读取文件

6d8ae4393412fa4c9c8a68f4d18cd6c8.png

B.做直方图

c03be7c1ce2314cc9691ebead03904f8.png

输出结果为

6d35e6e7c50d48193032fbfec0b5a986.png 02514773342cf167018811273b104196.png

C.归一化处理

7cd61daeffba0b9b9267b1ca5e5428f9.png

D.Reshape & Encode

训练集与测试集中的图片像素为28*28。而计算机在读取图片时,读取结果是一个具有784个数值的一维矩阵,因此我们需要将所有的数据转化为28*28*1的三维矩阵。(对于RGB图片来说,则需要转化为28*28*3的三维矩阵)。

原始图片的标签是数字0-9,我们需要对这些标签进行one-hot编码使其成为一个十维的向量。(例如:标签为数字2,进行one-hot编码后变为[0,0,1,0,0,0,0,0,0,0])。

24c98fe475d3c3ca00f0a909f5962788.png

E.对训练集进行分割

将训练集进行分割,其中10%作为验证集进行模型评估,90%用于训练模型。在2.A部分的直方图可以看到我们的数据较为平衡,因此可以直接对数据进行分割。

eec09b329eb2c77d985f3073df64dd12.png

3.3 CNN

A.定义模型

从之前的介绍中,我们应该已经对卷积层和池化层的作用及原理有了大概的了解。将二者结合使用,CNN就可以更准确地学习到最主要的特征。

01a3f7d714447d0f11fd702cf42f5038.png

B.设置优化器

200b10f2ea73ed7a9f995d381c72fa88.png

C.训练神经网络

0f9cb7645f4d2d035958efa2a6f11bf6.png c4a631ede21a50d40d1bf61c800c639e.png

3.4 模型评价

94944fae2a2dac20210062c31ca5cdd8.png 7b38cd676668a2801fd7d4af2a1dcabf.png cf4dacd87d1c54777933beda3db0673a.png 8c4842373e65630479bf383c9d60b239.png 5350e6ff59fb7402f181f1582bff433a.png d519a29353a4c2ff7483f4c69eab3c2b.png 7f630151d79d08fa6a24abd1b62f00d9.png

长按识别关注我们

责编 | 薛 申 栾

eec4f0420de6189c2bb86aca88a6ce03.png

点击下方

下载代码包,提取码:ovg4

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值