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 ...
随机推荐
- 自定义SpringBoot启动banner
序: springboot启动的时候会有一个启动logo似的东西,如图,这个logo似的东西叫做banner,本文小计修改此banner显示与关闭banner.没什么用,有兴趣可以玩玩-- 正文: 自 ...
- WPF自定义控件与样式-自定义按钮(Button)
一.前言 程序界面上的按钮多种多样,常用的就这几种:普通按钮.图标按钮.文字按钮.图片文字混合按钮.本文章记录了不同样式类型的按钮实现方法. 二.固定样式的按钮 固定样式的按钮一般在临时使用时或程序的 ...
- apacheds的客户端
Apache DS管理的JAVA实现 LdapConnection connection = new LdapNetworkConnection("localhost", 1038 ...
- SQL查询语句练习
最近在学习SQL嘛,所以各个地方找题目来练手,毕竟现在能离得开数据库么? Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C ...
- Oracle12c在Win10上的安装配置实践
1.环境 操作系统:Win10专业版(64位) 数据库:Oracle 12c Release 2(Version 12.2.0.1.0,64位) 2.下载Oracle12c oracle官网下载地址: ...
- Hive函数:rank()、dense_rank()
数据准备: G1,KING, G1,BING, G2,FING, G1,FORD, G2,SCOTT, G1,JONES, G2,BLAKE, G1,CLARK, G1,ALLEN, G1,CELL1 ...
- Hibernate(十四):HQL查询(三)
背景 基于上两章节<Hibernate(十二):HQL查询(一)>.<Hibernate(十三):HQL查询(二)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQ ...
- hdu1005 Number Sequence---找循环节
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1005题目大意: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + ...
- [转]linux查看日志文件内容命令
linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...
- requests-get请求
import requests response= requests.get('http://www.baidu.com')#get方法请求网址 print(response) print(respo ...