CNN结构
神经网络
卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。多了许多传统神经网络没有的层次。
卷积神经网络的层级结构
- 数据输入层/Input Layer
- 卷积计算层/Conv Layer
- 激励层/ReLU Layer
- 池化层/Pooling Layer
- 全连接层/FC Layer
1.数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
- 去均值:把输入数据各个维度都中心化为0
- 归一化:幅度归一化到同样的范围
- PCA/白化:用PCA降维;白化是对数据哥哥特征轴上的幅度归一化
去均值归一化的效果图:
去相关与白化效果图:
2.卷积计算层
在卷积层,有两个关键操作:
- 局部关联。每个神经元看做一个滤波器(filter)
- 窗口(receptive field)滑动,filter对局部数据进行计算
卷积层遇到的几个名词:
- 深度/depth
- 步长/stride(窗口一次滑动的长度)
- 填充值/zero-padding
填充值是什么呢?比如一个5*5的图片(一个格子一个像素),我们滑动窗口取2*2,步长取2,那么我们发现还剩下1个像素无法滑完,那怎么办?
在原先的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。
卷积计算过程:
参数共享机制
- 在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性
- 需要估算的权重个数减少
- 一组固定的权重和不同窗口内数据做内积:卷积
3.激励层
把卷积层输出结果做非线性映射。CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下:
激励层的实践经验:
- 不要用sigmoid
- 首先试ReLU,因为收敛速度快,但要小心
- 如果不能使用ReLU,试用Leaky ReLU或者Maxout
- 某些情况下tanh倒是不错的结果,但是很少
4.池化层
池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减少过拟合。简而言之,如果输入是图像的话,那么池化层的作用就是压缩图像。
池化层用的方法有Max pooling和average pooling,而实际用的较多的是Max pooling。
5.全连接层
跟传统的神经网络的连接方式一样。
卷积神经网络的精华:三概念两核心
两个核心:卷积和池化
- 卷积:主要起到作用的是抽取特征,是网络具有一定转移不变性,也有一定的降维作用。概述:设定一个n行m列的卷积窗口,采用的ReLU作为激励函数,对于输入X进行卷积操作。注意:1,卷积可能是单通道或者多通道卷积;2,卷积操作分为padding和非padding两种方式,padding也分为很多方式,比如zero-padding,mean-padding等。3,对同一个输入可以设置不同大小卷积和,或从不同的位置,或不同的卷积步长多次进行卷积,目的就是为了尽可能多的抽取特征。
- 池化:主要起到降维的作用。概述:设置一个n行m列的池化窗口,对输入X进行池化操作,采用Relu作为激活函数,也可以采用sigmoid或tans型激活函数,但注意函数的饱和死区特性导致的反向传播时的梯度消失问题,可以配合Batch Normalization使用。池化也有多种方式,比如max pooling,average polling
三概念:局部感受野,权值共享和下采样/降采样
- 局部感受野:卷积操作时卷积窗口与输入X重合的部分。
- 权值共享:卷积操作或池化操作时,卷积窗口或池化窗口的权值不发生变化。
- 下采样/降采样:直观感觉就是池化操作。
卷积神经网络的训练
- 同一般机器学习算法,先定义Loss function,衡量和实际结果之间的差距。
- 找到最小化损失函数的W和b,CNN中用的算法是SGD(随机梯度下降)
卷积神经网络的优缺点
优点:
- 共享卷积核,对高维数据处理无压力
- 无需手动选取特征,训练好权重,即得特征分类效果好
缺点:
- 需要调参,需要大样本量,训练最好要GPU
- 物理含义不明确(也就是说,我们并不知道每个卷积层提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)
卷积神经网络之典型CNN
- LeNet,这是最早用于数字识别的CNN
- AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比
- LeNet更深,用多层小卷积层叠加替换单大卷积层。
- ZF Net, 2013 ILSVRC比赛冠军
- GoogLeNet, 2014 ILSVRC比赛冠军
- VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好
卷积神经网络之fine-tuning
fine-tuning就是使用已用于其他目标,预训练好模型的权重或者部分权重,作为初始值开始训练,那么我们为什么不随机选取几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时。
fine-tuning具体做法:
- 复用相同层的权重,新定义层取随机权重初始值
- 调大新定义层的学习率,调小复用层学习率
边缘过渡不平滑
- 解决办法:采样窗口彼此重叠
总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好的避免了BP神经网络中反向传播时候梯度损失得太快。
卷积神经网络CNN主要用来识别位移,缩放及其他形式扭曲不变性的二维图形,由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。
CNN结构的更多相关文章
- CNN结构:图片风格分类效果已成(StyleAI)
CNN结构:图片风格分类效果已成.可以在色彩空间对图片风格进行分类,并进行目标分类. StyleAI构架:FasterRCnn + RandomTrees 为何不使用MaskRCNN? MaskRCN ...
- CNN结构:用于检测的CNN结构进化-分离式方法
前言: 原文链接:基于CNN的目标检测发展过程 文章有大量修改,如有不适,请移步原文. 参考文章:图像的全局特征--用于目标检测 目标的检测和定位中一个很困难的问题是,如何从数以万计的候选 ...
- AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)
前言: 文章:CNN的结构分析-------: 文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...
- CNN结构演变总结(一)经典模型
导言: 自2012年AlexNet在ImageNet比赛上获得冠军,卷积神经网络逐渐取代传统算法成为了处理计算机视觉任务的核心. 在这几年,研究人员从提升特征提取能力,改进回传梯度更新效果 ...
- CNN结构演变总结(二)轻量化模型
CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...
- CNN结构演变总结(三)设计原则
CNN结构演变总结(一)经典模型 CNN结构演变总结(二)轻量化模型 前言: 前两篇对一些经典模型和轻量化模型关于结构设计方面的一些创新进行了总结,在本文将对前面的一些结构设计的原则,作用进行总结. ...
- CNN结构:场景分割与Relation Network
参考第一个回答:如何评价DeepMind最新提出的RelationNetWork 参考链接:Relation Network笔记 ,暂时还没有应用到场景中 LiFeifei阿姨的课程:CV与ML课程 ...
- AI:IPPR的数学表示-CNN结构/参数分析
前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...
- CNN结构:SPP-Net为CNNs添加空间尺度卷积-神经元层
前几个CNN检测的框架要求网络的图像输入为固定长宽,而SPP-Net在CNN结构中添加了一个实现图像金字塔功能的卷积层SPP层,用于在网络中实现多尺度卷积,由此对应多尺度输入,以此应对图像的缩放变换和 ...
随机推荐
- lua 打印 table 拷贝table
-- 打印table function print_lua_table (lua_table, indent) if lua_table == nil or type(lua_table) ~= &q ...
- ORACLE的显式游标与隐式游标
1)查询返回单行记录时→隐式游标: 2)查询返回多行记录并逐行进行处理时→显式游标 显式游标例子: DECLARE CURSOR CUR_EMP IS SELECT * FROM EMP; ROW_E ...
- 在Django中使用F()函数
F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用.通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交.例如这样 # Tintin f ...
- 跟着百度学PHP[17]-复习PDO的几个关键词
主要就是复习一下几个关键词.发现太久没有写又忘了.惭愧. final self static const
- JVM Specification 9th Edition (4) Chapter 3. Compiling for the Java Virtual Machine
Chapter 3. Compiling for the Java Virtual Machine 内容列表 3.1. Format of Examples 3.2. Use of Constants ...
- 【iOS越狱开发】如何将应用打包成.ipa文件
在项目开发中,我们常常需要将工程文件打包成.ipa文件,提供给越狱的iphone安装. 下面是一种方法: 1.首先应该给工程安装好配置文件(这里不再敖述),在ios device的状态下,运行成功. ...
- springboot查找配置文件路径的过程
spring加载配置文件是通过listener监视器实现的,在springboot启动时: 在容器启动完成后会广播一个SpringApplicationEvent事件,而SpringApplicati ...
- 关联数据和formatter问题-easyui+微型持久化工具
控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...
- poj 2503 Babelfish(字典树或着STL)
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 35828 Accepted: 15320 Descr ...
- ubuntu 自动清理/tmp目录
在Ubuntu系统中,在/tmp文件夹里面的内容,每次开机都会被清空,如果不想让他自动清理的话,只需要更改rcS文件中的TMPTIME的值. 我们看如何来修改 sudo vi /etc/default ...