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 ...
随机推荐
- Angular组件——父组件调用子组件方法
viewChild装饰器. 父组件的模版和控制器里调用子组件的API. 1.创建一个子组件child1里面只有一个greeting方法供父组件调用. import { Component, OnIni ...
- 【漏洞复现】PHPCMS wap模块 SQL注入(附EXP)
漏洞影响版本:v9.5.8.v9.6.0 Step1: 访问:http://www.xxx.com/index.php?m=wap&a=index&siteid=1, 获取返回的coo ...
- jsp连接书库DatabaseUtil类
public class DatabaseUtil { private static String driver = ConfigManager.getProperties("driver& ...
- 关于tr069网管开发系列教程
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- POJ-1182 食物链---并查集(附模板)
题目链接: https://vjudge.net/problem/POJ-1182 题目大意: 中文题,不多说. 思路: 给每个动物创建3个元素,i-A, i-B, i-C i-x表示i属于种类x,并 ...
- [LeetCode] Increasing Subsequences 递增子序列
Given an integer array, your task is to find all the different possible increasing subsequences of t ...
- 【django小练习之主机管理界面】
需求: 利用django,js,bootstrap等实现登录,主机管理等操作. 实现截图 登录界面 主机界面,添加及编辑 部门管理界面 代码实现 目录层级 settings.py "&quo ...
- xcode7,AFN不能使用的问题
今天手贱立刻升级了Xcode7,结果AFN报错,且不能用了,解决办法如下 第一步:升级AFN到2.6.0 完成之后,运行,结果请求都失败,提示 The resource could not be lo ...
- Efficient&Elegant:Java程序员入门Cpp
最近项目急需C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 老特工我还需保持敬畏(内容太多),本文会从一个Java程序员的角度,制定高效学习路线快速入门C++ . Java是为了 ...
- pymysql实现从a表过滤出有效信息添加至b表
# Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/4/16 19:23 import pymysql # 创建连接 conn = py ...