① 用matlab2017a怎么使用alexnet网络结构
在addon里下载包含alexnet的附加包,然后使用语句:
net= alexnet();
就可以使用alexnet 了
② 巧借Deep Network Designer分析经典网络结构——AlexNet
关于如何使用Deep Network Designer,大家可以打开自己的MATLAB,在APP一栏中找到Deep Network Designer点击打开即可。使用的具体流程详见我在介绍LeNet5一文中,这里就不在赘述了。地址: https://www.jianshu.com/p/86f591c44ad3
AlexNet 是 vgg 网络和 resten 网络系列的基石。其网络架构中新颖的特征如下所示
1.以ReLu替代sigmoid和tanh函数。实践证明这样可以使网络更快收敛
2.其中最大池化( Max pooling)的概念也是在AlexNet提出的,即对每一个邻近像素组成的"池子",选取像素最大值作为输出。在LeNet中,池化的像素是不重叠的;而在 AlexNet 中进行的是有重叠的池化。(PS:我在介绍LeNet中的池化采用的也是最大池化)大量的实践表明,有重叠的最大池化能够很好的克服过拟合问题,提升系统性能。
3.随机丢弃(Dropout)为了避免系统参数更新过快导致的过拟合,每一次利用训练样本更新参数的时候,随机“丢弃”一定比例的神经元,被丢弃的神经元不再参与训练过程,输入和输出该神经元的权重系数也不做更新。这样每次训练时训练的网络构架都不一样,而这些不同的网络构架却分享共同训练的权重系数。实践表明,随机丢弃的技术技术减缓了网络收敛度,也大概率避免了过拟合的发生。
4.在多个GPU上训练。单个GPU存储空间有限,使用两块GPU,在每个GPU上存储一半的kernels,这两块GPU在特定层上通信
③ 图像识别之一:AlexNet
摘要:文章部分摘自链接。以kaggle上的猫狗数据集做训练,20000张训练图片,猫狗各10000张,5000张验证集,猫狗各2500张。
数据集链接
链接:https://pan..com/s/1uTl_ErqP_KxYH4M5feZOaQ
提取码:6666
@[toc]
在2012年前,图像特征都是机械地计算出来的。事实上,设计一套新的特征函数、改进结果,并撰写论文是盛极一时的潮流。SIFT[Lowe,2004]、SURF[Bayetal.,2006]、HOG(定向梯度直方图)[Dalal&Triggs,2005]、bagsofvisualwords和类似的特征提取方法占据了主导地位。
另一组研究人员,包括YannLeCun、GeoffHinton、YoshuaBengio、AndrewNg、ShunichiAmari和JuergenSchmidhuber,想法则与众不同:他们认为特征本身应该被学习。此外,他们还认为,在合理地复杂性前提下,特征应该由多个共同学习的神经网络层组成,每个层都有可学习的参数。在机器视觉中,最底层可能检测边缘、颜色和纹理。事实上,AlexKrizhevsky、IlyaSutskever和GeoffHinton提出了一种新的卷积神经网络变体AlexNet。在2012年ImageNet挑战赛中取得了轰动一时的成绩。AlexNet以AlexKrizhevsky的名字命名,他是论文[Krizhevskyetal.,2012]的第一作者。
有趣的是,在网络的最底层,模型学习到了一些类似于传统滤波器的特征抽取器。图1是从AlexNet论文[Krizhevskyetal.,2012]复制的,描述了底层图像特征。
AlexNet的更高层建立在这些底层表示的基础上,以表示更大的特征,如眼睛、鼻子、草叶等等。而更高的层可以检测整个物体,如人、飞机、狗或飞盘。最终的隐藏神经元可以学习图像的综合表示,从而使属于不同类别的数据易于区分。尽管一直有一群执着的研究者不断钻研,试图学习视觉数据的逐级表征,然而很长一段时间里这些尝试都未有突破。深度卷积神经网络的突破出现在2012年。2012年,AlexNet横空出世。它首次证明了学习到的特征可以超越手工设计的特征。它一举打破了计算机视觉研究的现状。AlexNet使用了8层卷积神经网络,并以很大的优势赢得了2012年ImageNet图像识别挑战赛。
AlexNet和LeNet的设计理念非常相似,但也存在显著差异。首先,AlexNet比相对较小的LeNet5要深得多。AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。其次,AlexNet使用ReLU而不是sigmoid作为其激活函数。
测试模型是否正确
把原来ALexNet最后的全连接层的神经元数目减少了一些方便训练,最后的验证准确度差不多86%左右,训练参数7057474个。
④ 经典卷积神经网络简介之【AlexNet】
论文中转 : ImageNet Classification with Deep Convolutional Neural Networks
自Le Net-5在1998年提出以后,时隔14年,AlexNet横空问世,在2012年ImageNet竞赛中以冠军的成绩笑傲群雄,也就是从那时起,更多更优秀的网络被相继提出。论文第一作者是来自多伦多大学的Alex Krizhevsky,因此网络称为Alex Net。
在论文中,作者训练了一个大而深(相比于之前)的卷积网络用于ImageNet比赛,将120万高分辨图像分为1000个类别。在测试集上,分别达到了37.5%的top-1错误率和17.0%的top-5错误率,超越了先前最好的网络。网络共有600万参数,65万个神经元,5个卷积层加3个全连接层,输出为1000类别。为了防止过拟合,作者采用了数据扩充和dropout正则法,实验结果表明此方法非常有效;为了加快训练速度,作者采用了两块并行的GPU同时对特征图进行运算。
由于采用了双GPU模式,所以结构图呈现的是上图的样子,下面引用一张博客作者 chenyuping666 文章的图片,可以详细的了解网络内部结构与实现细节。
从上图可以看到,输入为227×227×3的图像
在conv1中 ,卷积核大小为11×11,步长为4,通道数为96(每台GPU运算48个,下同),经过激活函数Relu激活后,采用最大池化(size=3×3,stride=2),标准化,输出为27×27×96。
在conv2中 ,卷积核大小为5×5,步长为1,通道数256,先对输入特征图扩展像素为31×31(pad=2),然后卷积,激活,池化(size=3×3,stride=2),标准化,输出特征图为13×13×256。
在conv3,conv4中 ,卷积核大小都为3×3,步长为1,pad=1,通道数为384,经过激活后输出特征图为13×13×384。
在conv5中 ,卷积核大小都为3×3,步长为1,通道数为256,经过激活,池化后输出特征图为6×6×256。
在fcn6,fcn7中 ,共有4096个神经元,采用了dropout技术防止过拟合。
在fcn8 ,也就是最后一层,采用softmax输出1000个类别。
相比于之前的网络,AlexNet为何能取得比较好的结果呢,从作者的论文中可以发现以下几点:
3.1 非线性激活函数Relu
在之前一般使用tanh(x)或sigmoid作为激活函数,但这些饱和的线性函数在梯度的计算上非常缓慢,并且容易产生梯度消失问题。Relu的出现使这些问题得到了有效的解决。在基于cifar-10数据集的标准四层网络测试中,采用tanh和Relu作为激活函数使error rate达到0.25所用的时间,Relu比tanh快大约6倍。
3.2 多个GPU
作者认为计算资源的大小限制了网络的大小,要想训练大的网络结构,必须拥有足够的计算资源。120万的数据集太大以至于单个GPU不足以匹配,因此作者将网络的计算任务分配到两个GPU上执行。目前GPU特别适合做并行化,因为一个GPU可以直接从另一个GPU读和写内容,而不需要经过主机内存。
3.3 局部响应归一化(LRN)
作者在文章中提出了Local Response Normalization的方法,分别将top-1和top-5错误率降低了1.4%和1.2%。作者在文中提到,如果训练样本产生一个正输入到Relu,网络只会在那个特定神经元上学习,但是引入局部响应正则化后,提高了网络的泛化能力。这种响应归一化会产生一种由某一神经元所激发的横向抑制,为由使用不同卷积核计算的神经元输出之中的“big activities”创造竞争。
3.4 重叠池化
一般的池化操作因为没有重叠,所以pool_size 和 stride是相等的。例如6×6的图像在size=2×2的池化后,输出为3×3,但是本文使用的size<stride,即取步长为1,输出为4×4大小的图像。这一方案分别使top-1和top-5错误率降低了0.4%和0.3%。
⑤ 经典CNN网络结构-AlexNet、VGG、GoogleNet、ResNet)
AlexNet之所以能够成功,跟这个模型设计的特点有关,主要有:
使用了非线性激活函数:ReLU
防止过拟合的方法:Dropout,数据扩充(Data augmentation)
其他:多GPU实现,LRN归一化层的使用
GoogLeNet(从Inception v1到v4的演进)
2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。
VGG 继承了 LeNet 以及 AlexNet 的一些框架结构,而 GoogLeNet 则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比 AlexNet 和 VGG 小很多。
GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。
解决深度网络(过拟合, 参数过多, 梯度弥散)这些问题的方法当然就是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。那么,有没有一种方法既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能, 如人类的大脑是可以看做是神经元的重复堆积,因此,GoogLeNet团队提出了Inception网络结构,就是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。
原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
输入为224x224的RGB图像,‘#3x3 rece’和‘#5x5 rece’表示3x3和5x5卷积之前1x1的卷积核的个数。
之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。