- 提出者
- Hinton及其学生
- 类 型
- 神经网络
- 外文名
- AlexNet
- 提出时间
- 2012
-
AlexNet
2019-11-12 07:49:17AlexNetAlexNet
参考文献格式:
《ImageNet Classification with Deep Convolutional Neural Network》
—基于卷积神经网络的图像分类
作者:Alex Krizhevsky
单位:加拿大多伦多大学
发表会议及时间:NIPS 2012一 论文导读
1.论文导读及研究背景介绍
AlexNet于2012年被提出,开启了深度学习的热潮。
在2012年之前对于图像的处理主要还是关于支持向量机的相关算法,支持向量机独立风骚十几年。由此可见,支持向量机有其特别出众发的优点。
但是在那个时候,人们对于图像处理并不自信,图像处理最基本的分类任务的最高准确率还只是出于89%左右,还是在一定的限定条件下。
16年残差神经网络让图像分类准确率达到96%及其以上,宣告了这类课题(识别图片等)的结束
CNN卷积是一种特征工程,用来提取特征
补充:LeNet简介
LeNet:径向基神经网络
研究一个网络最重要的就是特征工程,后面的分类用其他任何的分类器效果都不会差(有好的特征工程的情况下)为什么说CNN那么强呢?看起来如此简单的结构,甚至让人不可思议,就这样的结构为什么能取代图像处理方面的复杂的特征工程,就是因为随着CNN的加深,卷积神经网络逐层提取了边缘、轮廓、高级语义等越来越高级的特征信息。就是因为CNN能提取到大部分的图像特征工程的特征信息,只要随着CNN层数的加深。
ImageNet是人文、艺术类数据集,商业价值不高Benchmark具有商业价值的模型
Baseline就是通用的普遍的模型
两个小型数据集,可以用来测测自己写的模型
Top1:小类
Top5:大类,所以Top5>Top1图像分类的网络发展:(都是由卷积核构成的)
常用Vgg,
像GoogleNet、ResNet已经过于高级,适合比赛、论文。---- emmmm,2020的我对这句话感到羞愧!二 论文精读
三 代码实现
from torch import nn # 定义Alexnet网路结构 class AlexNet(nn.Module): def __init__(self, num_classes=5): super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1), # 修改了这个地方,不知道为什么就对了 # raw kernel_size=11, stride=4, padding=2. For use img size 224 * 224. nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(64, 192, kernel_size=5, padding=2), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(192, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), ) self.classifier = nn.Sequential( nn.Dropout(), nn.Linear(256 * 1 * 1, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(inplace=True), nn.Linear(4096, num_classes), ) def forward(self, x): x = self.features(x) x = x.view(x.size(0), 256 * 1 * 1) x = self.classifier(x) # return F.log_softmax(inputs, dim=3) return x
四 问题思索
-
Alexnet
2019-10-29 08:39:06Alexnet的主要贡献 1、使用了非线性激活函数RELU 2、防止过拟合的方法“Dropout”,Data Augumentation(数据增广) 3、其他:多GPU实现,LRN层的使用 使用ReLU激活函数 传统的神经网络普遍使用sigmoid或者tanh等非...https://blog.csdn.net/daydayup_668819/article/details/79744095
Alexnet的主要贡献
1、使用了非线性激活函数RELU
2、防止过拟合的方法“Dropout”,Data Augumentation(数据增广)
3、其他:多GPU实现,LRN层的使用使用ReLU激活函数
传统的神经网络普遍使用sigmoid或者tanh等非线性函数作为激活函数,但是容易出现梯度消失或者梯度爆炸的情况。在Alexnet中使用ReLU作为激活函数,其导数为1,计算量大大减小,收敛速度会比Sigmoid等快很多。
数据增广
当训练数据有限时,可以通过一些变换从已有的训练数据集中生成一些新的数据,以快速地扩充训练数据。其中,最简单、通用的图像数据变形的方式:水平翻转图像,从原始图像中随机裁剪、平移变换,颜色、光照变换。
AlexNet在训练时,在数据扩充(data augmentation)这样处理:
(1)随机裁剪,对256×256的图片进行随机裁剪到224×224,然后进行水平翻转,相当于将样本数量增加了((256-224)^2)×2=2048倍;
(2)测试的时候,对左上、右上、左下、右下、中间分别做了5次裁剪,然后翻转,共10个裁剪,之后对结果求平均。作者说,如果不做随机裁剪,大网络基本上都过拟合;
(3)对RGB空间做PCA(主成分分析),然后对主成分做一个(0, 0.1)的高斯扰动,也就是对颜色、光照作变换,结果使错误率又下降了1%。重叠池化
一般的池化(Pooling)是不重叠的,池化区域的窗口大小与步长相同。在AlexNet中使用的池化(Pooling)却是可重叠(Overlapping)的,也就是说,在池化的时候,每次移动的步长小于池化的窗口长度。AlexNet池化的大小为3×3的正方形,每次池化移动步长为2,这样就会出现重叠。重叠池化可以避免过拟合。
Dropout
引入Dropout主要是为了防止过拟合。在神经网络中Dropout通过修改神经网络本身结构来实现,对于某一层的神经元,通过定义的概率将神经元置为0,这个神经元就不参与前向和后向传播,就如同在网络中被删除了一样,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新。在下一次迭代中,又重新随机删除一些神经元(置为0),直至训练结束。
Dropout也可以看成是一种模型组合,每次生成的网络结构都不一样,通过组合多个模型的方式能够有效地减少过拟合,Dropout只需要两倍的训练时间即可实现模型组合(类似取平均)的效果,非常高效。Alexnet的特点与创新
Alexnet结构图
-
B站马士兵python入门基础版详细笔记(5)
-
30个生涯锦囊,带你跳出迷茫,找到适合你的职业方向
-
分布式微服务例子:SpringBoot2.X+SpringCloud+SpringDataJPA+Consul+Feign+Swagger
-
USACO邮票(完全背包)
-
美国犯罪数据可用于研究犯罪
-
Unity游戏开发之数字华容道
-
复练-关于面试的科技树-简历的提升、问答环节
-
Python-3.7.9.tar.xz
-
性能测试面面观
-
CMVS-PMVS-master
-
手势解锁-canvas-javascript实战
-
2020-12-01-DVWA.md
-
在线视频学习网站的设计与实现.
-
人间值得 未来可期
-
mirrors-llvm-project-release-11.x.zip
-
02 Java面向对象—第4节 面向对象高级~编写用户登陆案例
-
Java无损导出及转换word文档
-
使用oled显示树莓派ip及其他信息
-
Kotlin协程极简入门与解密
-
SSM