深度学习-卷积神经网络原理
卷积神经网络原理
概述
卷积神经网络又称作(ConvNet, CNN),它的出现解决了人工智能图像识别的难题,图像识别数据量大,并且在识别的过程中很难保留原有的信息,因此卷积的作用就体现在这里。比如我们经常说的像素,100W像素,那就是,1000X1000个像素点,同时每个像素点上有3个颜色参数,分别为红、绿、蓝。那么处理一张100w像素的图片,就需要输入300w个参数,这还是100w像素的图片,现在看看自己手机的照片,随便一张都是千万级别的,因此图片数据需要降维。
卷积神经网络的构成
典型的 CNN 由3个部分构成:
- 卷积层
- 池化层
- 全连接层
其中卷积层用来提取图像的局部信息,池化层用来对数据进行降维,全连接层为普通的神经网络,用于输出想要的结果。 从整体的结构上看,卷积神经网络类似与我们大脑对图像的处理过程,我们在观察一个事物或者一个人的时候,总是先从局部提取一些关键的信息,比如现在脑海里想一个人的头像,这个人的脸并不是全部很清晰的,但是他脸上的关键信息是很清楚的,比如孙红雷。
卷积运算
I为输入的信息,K为卷积核(3X3),convolved为卷积结果,卷积核通过不断的滑动最终生成最后的卷积结果。比如卷积结果的左上角数字4,就是通过i的阴影部分和k进行逐元素相乘得到。同时在卷积的过程中需要注意滑动的步幅,这里的步幅为1. 在实际应用中,可以使用不同的卷积核,卷积出的值越大,保留的信息越多。
池化运算
池化运算就是下采样的过程,通过卷积之后得到的图片虽然缩小了,但是还是很大,因为卷积核比较小,为了降低数据维度,因此采用下采样的方式,如图所示,一开始的图片为44的图片,通过22的采样窗口,将数据压缩为2*2的数据,这里每次采样采用的最大池化原则,同时在实际中也存在平均采样的方法。
循环
前面进行了一个卷积和池化的过程,在实际的人工智能的操作中,研究者通常采用多个卷积和池化操作,最后使得数据达到要求的大小进行运算。
全连接层
这部分的就是卷积神经网络的神经网络部分了,通过前面的卷积和池化之后,图片已经缩小的足够进行神经网络运算了,对于神经网络的部分我后面会专门进行一次学习,这里不过介绍
卷积输出大小计算
N = (W − F+2P)/S + 1
- 输入图片大小 W×W
- Filter大小 F×F 即卷积核大小
- 步长 S
- padding的像素数 P 这里是指的填充的图像圈数,目的是为了防止图像丢失边际信息和方式过快变小。
比如 32x32大小的图片,卷积核大小为5x5,卷积核个数为6,那么它的输出大小为 N=32-5+1= 28,这样就形成了28x28x6的神经元。这个处理其实就是经典的LeNet5神经网络的C1层
上图就是经典的LeNet5的网络
- C1层-卷积层
- S2层-池化层:在C1层进行卷积之后,随后对C1的结果进行下采样,使用的是2*2的采样区域,生成14x14x6的输出。
- C3层-卷积层 生成10x10x16的输出
- S4层-池化层 生成5x5x16的输出
- C5层-卷积层 生成1x1x120的输出
- F6层-全连接层 F6层有84个节点
- Output层-全连接层 共有10个节点,分别代表数字0到9
LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络,也是比较经典的神经网络学习架构,后续会专门对这个结构进行详细解析和重现。
结束语
love&peace
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Boot中集成Slf4j 与Logback
- 一文搞定 Linux 常用高频命令
- 推荐一款科研必备的Python数据可视化神器——PyQtGraph
- 机器学习基础:可视化方式理解决策树剪枝
- 神级代码注释-这次是来搞笑的
- Gremlin 图查询概述
- JS,PHP,Python,Java对JSON数据的处理
- 基于Canal与Flink实现数据实时增量同步(二)
- Spring第四天:SSH的整合、HibernateTemplate的使用、OpenSessionInViewFilter的使用
- IDEA 下单程序多端口不同配置独立运行
- 基于Canal与Flink实现数据实时增量同步(一)
- 8848钛金手机之nacos的注册发现
- 让你git 时不再输入账号和密码
- JS 实现点击按钮复制一段文字
- Python操作Excel合并单元格