卷积神经网络CNN介绍:结构框架,源码理解【转】
1. 卷积神经网络结构
卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表达;每层由多个二维平面组成,每个平面为各层处理后的特征图(feature map)。
常见结构:
输入层为训练数据,即原始数据,网络中的每一个特征提取层(C-层)都紧跟着一个二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。具体C层和S层的个数不确定,依据具体案例而定;最后一个S,即完成了对原始数据的特征提取后,把S层的特征数据进行向量化(vector),然后连接到相应分类器。
一个具有7(输入层+c1+s2+c3+s4+c5+v)层网络结构的字母识别的CNN网络
2 卷积层Convolution作用:
卷积操作:用一个滤波器(就是一个小特征矩阵,也称卷积核)在图像矩阵上游走,在对应位置元素相乘,再把相乘的结果相加,最后相加的结果形成新的图像矩阵,游走完成后即完成了对原始图像的卷积变换(映射变换),形成此滤波器下的特征提取。
C层是一个特征提取层,为什么用卷积运算;卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音;例如用增强边缘的卷积去处理图像,处理后的图像边缘特征增强。
3 S层作用:
S-层可看作是模糊滤波器,起到二次特征提取的作用。S层又叫做subsample层,子采样层或者pooling(池化)层
在通过卷积获得了特征 (features)之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax分类器,但这样做面临计算量的挑战。例如:对于一个 96X96像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,由于有 400个特征,所以每个样例 (example)都会得到一个 892 *400 = 3,168,400维的卷积特征向量。学习一
个拥有超过 3百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。
为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。
4 网络的前馈计算:
4.1C层卷积计算:
用一个可训练的滤波器kij去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是S层的结果特征map了),然后加一个偏置bx,得到卷积层Cx。
假设层为s层特征图像Xil-1(pooling层),l层为卷积C层,卷积结果为Xjl
参数kij为两层间卷积核(滤波器,kernals),由于s层有m个特征,c层有n个特征,所以一共有m*n个卷积核。bj为卷基层每个结果特征对应的一个偏置项bias,f为非线性变换函数sigmoid函数;Mj为选择s层特征输入的个数,即选择多少个s层的图像特征作为输入;由于选择s层的特征个数方法不同,主要分为三种卷积选择方式
1、全部选择:
s层的全部特征都作为输入, Mj=m。如上图所示。
2、自动稀疏选择:
在卷积计算前加入稀疏稀疏aij,通过稀疏规则限制(论文后面),使算法自动选取部分s层特征作为输入,具体个数不确定。
3、部分选择:
按照一定的规则,固定的选取2个或者3个作为输入。
卷积结果特征图像大小计算:
假设输入特征图Feature Map大小为28*28。卷积核大小5*5。
卷积后特征图大小size(Cx)=(28-5+1,28-5+1)
Ps:卷积计算相当于神经网络中的前馈计算sigmoid(W*X+b),卷积核kij相当于系数矩阵W的一部分小切片,b为偏置项,详细介绍见上一篇博客:卷积Convolution和池化pooling特征提取,分类
卷积核kernals的来源:
1,随机初始化;2,用linear sparseautoencoder进行非监督特征学习,学习特征卷积
4.2 S层计算:
Pooling池化计算主要分为均值池化,最大值池化等,有的算法还在此话后进行sigmoid非线性变换;
直接均值池化
进行非线性变换池化
down(Xjl-1)表示下采样操作,就是对一个小区域进行pooling操作,使数据降维。
5.网络的反向传播:
可以先参考 :Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现了解一下cnn网络的前馈计算和误差反向传播的过程;之后再看Deep Learning论文笔记之(五)CNN卷积神经网络代码理解。
两个版本的cnn代码:
1,Deep learning:五十一(CNN的反向求导及练习)次cnn网络比较简单,而且感觉设计上面有些问题,cnn是为了提取特征来降低原始数据的,最后这个网络反而把数据量变大了,但是作为代码联系还是挺好的,网络简单,讲解详细。在此感谢tornadomeet;
2,Deep Learning论文笔记之(五)CNN卷积神经网络代码理解,此matlabdeeplearning toolbox中的代码,相比1中的代码,这个代码感觉标准了许多,采用栈式编程,用栈(matlab中的元包矩阵)来构架整个网络,显得结构紧凑,规整。(个人见解)。
卷积神经网络CNN介绍:结构框架,源码理解【转】的更多相关文章
- 卷积神经网络(CNN)模型结构
在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...
- 深度学习之卷积神经网络CNN
转自:https://blog.csdn.net/cxmscb/article/details/71023576 一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...
- 深度学习之卷积神经网络CNN及tensorflow代码实例
深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例
深度学习之卷积神经网络CNN及tensorflow代码实现示例 2017年05月01日 13:28:21 cxmscb 阅读数 151413更多 分类专栏: 机器学习 深度学习 机器学习 版权声明 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 售价249英镑 我曾经花了 ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 卷积神经网络CNN总结
从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...
- 卷积神经网络CNN在自然语言处理的应用
摘要:CNN作为当今绝大多数计算机视觉系统的核心技术,在图像分类领域做出了巨大贡献.本文从计算机视觉的用例开始,介绍CNN及其在自然语言处理中的优势和发挥的作用. 当我们听到卷积神经网络(Convol ...
随机推荐
- JavaScript的检测属性、属性特性、枚举属性
/* 检测属性 检测属性可以通过三种方式 1.通过in运算符 2.通过hasOwnPerperty() 如果给定的属性是继承属性将返回false 3.通过propertyIsEnumerable(): ...
- 前端开发之-------------合理利用CSS的权重----------------
什么是CSS的权重?对于前端工程师来说,这是一个很基础的问题,如果前端工程师没有深刻理解这个概念,则很难写出高质量的CSS代码. 那么到底什么是CSS的权重呢?我们又怎么来进行判定CSS的权重呢? 讨 ...
- 一个用WPF做的简单计算器源代码
一.界面设计XAML代码 <Window x:Class="fengjisuanqi.MainWindow" xmlns="http://schemas.micro ...
- Sql Server 常用的查询
基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 selec ...
- Ueditor图片缩放的设置
最近在用Ueditor,功能绝逼强大,不过也有遗憾的地方,上传图片的时候自动缩放的小了,想要图片按宽度整体等比缩放,找了好久,研究了下,终于找到解决方法了. 先改前台的的dialogs/image/i ...
- C++primer 阅读点滴记录(三)
14章 操作符重载和转换 重载操作符是具有特殊名称的函数:保留字operator后接需要定义的操作符符号. 1.重载的操作符名: + – * / % ^ & | ~ ! , = < & ...
- Python2安装说明
1.Python版本 Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.12. Python 3.x的版本的,被称为Python3:是最新的版本的,比如 ...
- python SocketServer 源码分析
附上原文链接: http://beginman.cn/python/2015/04/06/python-SocketServer/
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- VBA赋值给指定单元格
这是一个Range对象基本操作实例,对指定单元格赋值,然后使用弹窗获取值. 代码如下: Sub test1() Worksheets( MsgBox "工作表Sheet1内单元格A5中的值为 ...