CNN中的经典结构之AlexNet
AlexNet的基本结构
Alexnet是由5个卷积层和三个全连接层组成,一共8个权重层(池化层不是权重层因为其没有参数),其中ReLU激活函数作用在每个卷积层和全连接层上,在第一个卷积层和第二个卷积层后面连接一个局部响应规范化层,最大池化层作用在第一个卷积层,第二个卷积层和第五个卷积层的输出上。

ReLU
在AlexNet结构中抛弃了传统的‘s'形激活函数,而是选择了修正的线性单元作为激活函数也就是relu传统的’s'形激活函数有f(x)=1/(1+e-x),f(x)=tanh(x),其中sigmoid函数如下图:

sigmoid函数具有饱和特性,当输入较大或者较小时,输出曲线接近平缓,此时梯度几乎为0,会造成消失的梯度问题,并且它的输出均值不为0,可能会造成偏置转移,会使得后一层的神经元将上一层的输出的非0均值的信号作为输入,并且它的输出范围在0~1,没有包含负信息,可能会损失一部分有用的信息。

上图为tanh函数的曲线图,由图可知,它的输出值的范围为[-1,1],其输出均值为0,并且包含了负信息,但是由于它也具有饱和特性,所以也会造成消失的梯度问题。

ReLU的形式为:f(x)=max(0,x),当输入为正时,输出值取其本身,此时关于输入x的导数为1,是一个常数,避免了消失的梯度问题,并且当输入小于0时,输出为0,引进了稀疏性,能够加速训练,但是由于其输出均值也大于0,所以也会出现偏置转移现象,并且由于当输入小于0时,对应的神经元输出为0,梯度为0,对应的权重也就无法更新。
重叠最大池化
AlexNet中使用了池化区域为3X3,步长为2的重叠池化,并且声称此种池化方法要比传统的池化区域为2X2,步长为2的非重叠池化方法效果好,论文中说效果提升了0.3%,但是我在其他数据集实验发现,重叠池化的效果不如非重叠池化,理由是当使用重叠池化时,下一个池化区域的最大值很可能就是上一个池化区域最大元素的副本,此时相当于造成了特征冗余。
局部响应规范化

其中aix,y为第i个卷积核在位置(x,y)处做卷积得到特征映射中的元素,再使用relu对其进行非线性变化得到的神经元。bix,y为经过局部响应规范化处理后得到的神经元。N是在某一层中卷积核的总量.k,ε,n,β为超参数,由网络训练得到,在AlexNet中设置k=2,n=5,ε=10-4,β=0.75。局部响应规范化中的求和是在n个相邻的特征映射中的同一个位置,也就是(x,y),这样相当于在神经元之间引入一种竞争机制,较强的特征会有一个较大的元素值。
减少过拟合
1.数据集扩增
在图像数据中最简单和最普通减少过拟合的方法就是人工的扩增数据集,当然这是在保留标签信息的情况下。比如原图片的尺寸是256X256,就可以随机的在原图片上裁剪一个224X224的小块进行训练,并对其进行水平翻转,平移等操作,扩大数据集。
2.Dropout
Dropout是一种正则化方法,随机的将隐藏层的神经元的值置为0,其中有一个drop率为p,通常p设置为0.5,dropout强迫每个神经元学习独立的特征,而不用依赖其他的神经元。它也相当于权重衰减,当某个神经元的值为0时,连接它的权重也为0,网络的参数变少,复杂度降低,防止过拟合,并且它也相当于一种模型融合,假设网络中一共有n个神经元,p=0.5,则此时,相当于有2n个子网络同时训练,是一种模型平均方法,提高泛化表现。
网络结构分析
通常在卷积层后面都应该接一个池化层,但是AlexNet却只在第一个卷积层,第二个卷积层和最后一个卷积层后面连接最大池化,这是因为在网络的较低层,特征映射的大小一般很大,含有较多的参数,这是进行池化的目的是为了减少的参数的数量,防止过拟合,而在网络的较高层,提取的特征一般是高级特征,可能是某个物体的轮廓,比如小狗的眼睛,但是小狗可能出现在图像中的任意位置,此时最大池化的目的是提供一种平移翻转不变性。至于AlexNet为什么只用了5个卷积层,文中提到深度是重要的,但是再深可能会出现退化现象。而去掉一个卷积层又会使网络的表示能力下降。
CNN中的经典结构之AlexNet的更多相关文章
- 论文笔记:CNN经典结构1(AlexNet,ZFNet,OverFeat,VGG,GoogleNet,ResNet)
前言 本文主要介绍2012-2015年的一些经典CNN结构,从AlexNet,ZFNet,OverFeat到VGG,GoogleNetv1-v4,ResNetv1-v2. 在论文笔记:CNN经典结构2 ...
- 小白的经典CNN复现(三):AlexNet
小白的经典CNN复现(三):AlexNet 锵锵--本系列的第三弹AlexNet终于是来啦(≧∀≦),到了这里,我们的CNN的结构就基本上和现在我们经常使用或者接触的一些基本结构差不多了,并且从这一个 ...
- 论文笔记:CNN经典结构2(WideResNet,FractalNet,DenseNet,ResNeXt,DPN,SENet)
前言 在论文笔记:CNN经典结构1中主要讲了2012-2015年的一些经典CNN结构.本文主要讲解2016-2017年的一些经典CNN结构. CIFAR和SVHN上,DenseNet-BC优于ResN ...
- deep learning 经典网络模型之Alexnet、VGG、Googlenet、Resnet
CNN的发展史 上一篇回顾讲的是2006年Hinton他们的Science Paper,当时提到,2006年虽然Deep Learning的概念被提出来了,但是学术界的大家还是表示不服.当时有流传的段 ...
- CNN中,1X1卷积核到底有什么作用呢?
CNN中,1X1卷积核到底有什么作用呢? https://www.jianshu.com/p/ba51f8c6e348 Question: 从NIN 到Googlenet mrsa net 都是用了这 ...
- CNN中的局部连接(Sparse Connectivity)和权值共享
局部连接与权值共享 下图是一个很经典的图示,左边是全连接,右边是局部连接. 对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 ...
- MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)
振动论坛原版主eight的经典贴http://www.chinavib.com/thread-45622-1-1.html MATLAB对于文本文件(txt)进行数据读取的技巧总结(经典中的经典)由于 ...
- 如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果?
如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果? 今天,坑爹的实验,我处理 SUN397 的时候,忘记去掉灰度图了,结果,利用微调后的 model 提取 feature,悲剧的发现,无论 ...
- CNN中的卷积核及TensorFlow中卷积的各种实现
声明: 1. 我和每一个应该看这篇博文的人一样,都是初学者,都是小菜鸟,我发布博文只是希望加深学习印象并与大家讨论. 2. 我不确定的地方用了"应该"二字 首先,通俗说一下,CNN ...
随机推荐
- CSS基础:块级元素与盒模型
简介 在 HTML4.01 中,元素通常可以分为块级元素( “Block-level element” ) 和内联元素 ( "Inline-level element" ) 两大类 ...
- idea找不到package下的mapper.xml文件
由于开发人员使用不同的开发工具,导致eclipse的开发人员将mapper.xml文件习惯性的放到package下,以便查看,而eclipse编译时,不会忽略package下的xml以及dtl文件,所 ...
- javascript学习(2)修改html元素和提示对话框
一.修改html元素 1.修改p元素 1.1.源代码 1.2.执行前 1.3.执行后 2.修改div元素的className 2.1.源代码 1.2.执行前 1.3.执行后 3.直接在当前位置输出内容 ...
- javascript学习(1)用户的Javascript 放在哪里和函数的绑定方式
一.实验 1:js脚本放在那里最合适? 1.代码 1.1.test.html <!DOCTYPE html><html> <head> < ...
- GIT入门笔记(18)- 标签创建和管理
git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id: git tag -a <tagname> -m "blablabla ...
- C#微信公众号——自定义菜单
自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替.自定义菜单的介绍,可以看官方开发文档http://mp. ...
- java中数组、list、泛型集合的长度
1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这 ...
- Django实现发邮件
1 首先去自己的邮箱申请,在设置里面找,申请开通smtp服务,我用的是163邮箱 2 在项目下settings.py中添加设置: # 配置邮箱发邮件的相关功能 #这一项是固定的 EMAIL_BACKE ...
- python基础(常用内容)
python基础(常用内容) 机器数: 一个数在计算机中的二进制表示形式就是机器数. 例如: +3用机器数表示就用<00000011>表示 -3用机器数表示就用<10000011&g ...
- Oracle12c:支持通过创建identity columen来实现创建自增列
oracle12c之前如果需要创建自增列必须要通过sequence+trigger来实现.但是oracle12c已经可以像mysql,sqlserver一样通过identity column来设置自增 ...