卷积神经网络之卷积操作
深度学习是一个目前非常火热的机器学习分支,而卷积神经网络(CNN)就是深度学习的一个代表性算法。CNN主要用来解决图像相关的问题,目前,单张图片的识别问题已基本被攻克,CNN的下一个战场将是视频识别。
那么为什么卷积神经网络在图片任务上表现这么好呢?一大原因就是其中的卷积操作。那么什么是卷积操作呢?
卷积这一概念来源于物理领域,但在图像领域又有所不同。在图像处理中,卷积操作就是使用一个滑动窗口,在图像上从上到下,从左到右滑动,并对窗口里的像素进行加权平均。每滑动一下,就得出一个加权平均的结果,因此滑动的结果也是一个二维数组。
下面是一个图示。
二维图像上的卷积操作
上图中,Input为一个二维的3*4的图像(当然实际图像不会这么小,例如ImageNet上面的图像是224*224的),而Kernel称为卷积核,也就是上面提到的滑动窗口,此处是一个2*2的卷积核,它里面包含了4个实数,表示四个位置上的权重,用来对窗口里的像素进行加权平均。Output表示卷积操作之后的结果,这个窗口经过从上到下从左到右的滑动之后,得到了6个加权平均结果,构成了一个2*3的二维数组。
上面的例子是黑白图像的例子,那么彩色图像如何进行卷积呢?我们知道,彩色图像有三个颜色通道:红绿蓝,通常,在卷积神经网络中,是对这三个通道分别进行卷积操作的,而且各通道之间的卷积核也各不相同。
卷积操作有什么好处呢?
首先,卷积操作可以模拟图像里面的各种算子,例如边缘检测、锐化、模糊算子等,这些算子之间的区别只在于卷积核的不同,操作是一样的。而且在卷积神经网络中,卷积核是算法从数据中学习出来的,因此具有很大的自由度,不再需要人工的设计图像算子,因此CNN算法相当强大。
下面是一些图像算子的卷积核,详细信息可以参见 https://en.wikipedia.org/wiki/Kernel_(image_processing)。
其次,卷积操作大大地降低了参数数量,从而可以避免过拟合问题。在神经网络中,待学习的参数往往数量十分庞大,因此十分容易就“记住”了训练数据,而在测试数据上表现很差,也就是说,发生了过拟合。而卷积操作中,只需要学习卷积核,而卷积核往往很小(通常在5*5以内),因此参数的数量也很小,这就可以有效的避免过拟合。
三维卷积
以上是针对单张图片的卷积操作,那么对于视频,又该如何进行卷积呢?
3D卷积图示
单张图片的输入是一个二维数组,而视频的输入就是一串二维数组,这些二维数组就组成了一个三维立方体,而相应的卷积核也扩展为三维,这样,可以自然地将卷积操作扩展到三维。在进行滑动时,就是从左到右、从上到下、从前到后了。
- 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 数组属性和方法
- 利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
- Android App端与PHP Web端的简单数据交互实现示例
- Android开发实现读取assets目录下db文件的方法示例
- Android Textview实现颜色渐变滚动效果
- Android中fragment+viewpager实现布局
- android自动工具类TextUtils使用详解
- Android常用正则表达式验证工具类(实例代码)
- Android webview实现拍照的方法
- Android ListView自定义Adapter实现仿QQ界面
- Android webview旋转屏幕导致页面重新加载问题解决办法
- Android系统对话框使用详解(最详细)
- Android webview 遇到android.os.FileUriExposedException错误解决办法
- Android修改字体样式的示例代码
- Android Retrofit 中文乱码问题的解决办法
- Android实现Camera2预览和拍照效果