当前位置:   article > 正文

AlexNet:论文阅读及pytorch网络搭建_在alexnet中添加正则化pytorch

在alexnet中添加正则化pytorch

AlexNet

Alex Krizhevsky / University of Toronto / kriz@cs.utoronto.ca

Ilya Sutskever / University of Toronto / ilya@cs.utoronto.ca

Geoffrey E. Hinton / University of Toronto / hinton@cs.utoronto.ca

参考:AlexNet论文(ImageNet Classification with Deep Convolutional Neural Networks)(译)
b站教程:深度学习图像分类篇

Abstract

我们训练了一个大型深度卷积神经网络,将 ImageNet LSVRC-2010 竞赛中的 120 万张高分辨率图像分为 1000 个不同的类别。
在测试数据上,我们实现了 37.5% 和 17.0% 的 top-1 和 top-5 错误率,这比之前的最新技术要好得多。
具有 6000 万个参数和 650,000 个神经元的神经网络由五个卷积层组成,其中一些后面是最大池化层,三个全连接层具有最终的 1000 个softmax输出。
为了加快训练速度,我们使用非饱和神经元和能高效进行卷积运算的GPU实现。
为了减少全连接层的过拟合,我们采用了最近开发的一种称为“dropout”的正则化方法,事实证明这种方法非常有效。
我们还在 ILSVRC-2012 竞赛中输入了该模型的一个变体,并获得了 15.3% 的前 5 名测试错误率,而第二名的测试错误率为 26.2%。

1 Introduction

目前,机器学习方法对物体识别非常重要。
为了改善他们的表现,我们可以收集更大的数据集,训练更强大的模型,并使用更好的技术来防止过拟合。
直到最近,标记好图像的数据集相对还较小——大约上万的数量级(例如,NORB [16],Caltech-101/256 [8,9]和CIFAR-10/100 [12])。
使用这种规模的数据集可以很好地解决简单的识别任务,特别是如果他们增加了保留标签转换(label-preserving transformations)。
例如,目前MNIST数字识别任务的最低错误率(<0.3%)基本达到了人类的识别水平[4]。
但是物体在现实环境中可能表现出相当大的变化性,所以要学会识别它们,就必须使用更大的训练集。
事实上,小图像数据集的缺点已是众所周知(例如,Pinto[21]),但直到最近才可以收集到数百万的标记数据集。
新的大型数据集包括LabelMe [23],其中包含数十万个完全分割的图像,以及ImageNet [6],其中包含超过1500万个超过22,000个类别的高分辨率图像。

要从数百万图像中学习数千个类别,我们需要一个具有强大学习能力的模型。
然而,物体识别任务的巨大复杂性意味着即使是像ImageNet这样大的数据集也不能完美地解决这个问题,所以我们的模型也需要使用很多先验知识来弥补我们数据集不足的问题。
卷积神经网络(CNN)就构成了一类这样的模型[16,11,13,18,15,22,26]。
它们的容量可以通过改变它们的深度和宽度来控制,并且它们也对图像的性质(即统计量的定态假设以及像素局部依赖性假设)做出准确而且全面的假设。
因此,与具有相同大小的层的标准前馈神经网络相比,CNN具有更少的连接和参数,因此它们更容易训练,而其理论最优性能可能稍微弱一些。

尽管CNN具有很好的质量,并且尽管其局部结构的效率相对较高,但将它们大规模应用于高分辨率图像时仍然显得非常昂贵。
幸运的是,当前的GPU可以用于高度优化的二维卷积,能够加速许多大型CNN的训练,并且最近的数据集(如ImageNet)包含足够多的标记样本来训练此类模型,而不会出现严重的过度拟合。

本文的具体贡献如下:
我们在ILSVRC-2010和ILSVRC-2012比赛中使用的ImageNet子集上训练了迄今为止最大的卷积神经网络之一[2],并在这些数据集上取得了迄今为止最好的结果。
我们编写了一个高度优化的2D卷积的GPU实现以及其他训练卷积神经网络的固有操作,并将其公开。
我们的网络包含许多新的和不同寻常的功能,这些功能可以提高网络的性能并缩短训练时间,详情请参阅第3节。
我们的网络规模较大,即使有120万个带标签的训练样本,仍然存在过拟合的问题,所以我们采用了几个有效的技巧来阻止过拟合,在第4节中有详细的描述。
我们最终的网络包含五个卷积层和三个全连接层,并且这个深度似乎很重要:我们发现去除任何卷积层(每个卷积层只包含不超过整个模型参数的1%的参数)都会使网络的性能变差。
最后,网络的规模主要受限于目前GPU上可用的内存量以及我们可接受的训练时间。
我们的网络需要在两块GTX 580 3GB GPU上花费五到六天的时间来训练。
我们所有的实验都表明,通过等待更快的GPU和更大的数据集出现,我们的结果可以进一步完善。

2 Dataset

ImageNet 是一个包含超过 1500 万张标记的高分辨率图像的数据集,大约 22,000 个类别。
这些图像是从网络上收集的,并使用亚马逊的 Mechanical Turk 众包工具由人工标记器进行标记。
从 2010 年开始,作为 Pascal 视觉对象挑战赛的一部分,这是每年举办一次的名为ImageNet大型视觉识别挑战赛(ILSVRC)的比赛。
ILSVRC 使用 ImageNet 的一个子集,在 1000 个类别中的每个类别中包含大约 1000 张图像。总共有大约 120 万张训练图像、50,000 张验证图像和 150,000 张测试图像。

ILSVRC-2010 是唯一提供测试集标签的 ILSVRC 版本,因此这是我们执行大部分实验的版本。
由于我们还在 ILSVRC-2012 竞赛中输入了我们的模型,因此在第 6 节中,我们还报告了此版本数据集的结果,其中测试集标签不可用。
在 ImageNet 上,通常会报告两个错误率:top-1 和 top-5,其中 top-5 错误率是测试图像中正确标签不在模型认为最可能的五个标签中的部分

ImageNet 由可变分辨率的图像组成,而我们的系统需要恒定的输入维度
因此,我们将图像下采样到 256×256 的固定分辨率。
给定矩形图像,我们首先重新缩放图像,使短边的长度为 256,然后从结果图像中裁剪出中央 256×256 块。
除了将每个像素中减去训练集的像素均值之外,我们没有以任何其他方式对图像进行预处理。
所以我们在像素的(中心)原始RGB值上训练了我们的网络

3 Architecture

图 2 总结了我们网络的架构。
它包含八个学习层——五个卷积层和三个全连接层
下面,我们将描述我们网络架构的一些新颖或不寻常的功能。
第 3.1-3.4 节根据我们对其重要性的估计进行排序,最重要的在前。

在这里插入图片描述

图 2:
我们的 CNN 架构图,明确显示了两个 GPU 之间的职责划分。
一个 GPU 运行图形顶部的层部分,而另一个运行图形底部的层部分。
GPU 仅在某些层进行通信。
网络的输入为 150,528 维,网络其余层的神经元数量为253,440-186,624-64,896-64,896-43,264-4096-4096-1000。

3.1 ReLU Nonlinearity

对一个神经元模型的输出的常规套路是,给他接上一个激活函数: f ( x ) = t a n h ( x ) f(x)=tanh(x) f(x)=tanh(x)或者 f ( x ) = ( 1 + e − x ) − 1 f(x)=(1+e^{−x})^{−1} f(x)=(1+ex)1
就梯度下降法的训练时间而言,这些饱和非线性函数比非饱和非线性函数如 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)慢得多。
根据Nair和Hinton的说法[20],我们将这种非线性单元称为——修正非线性单元(Rectified Linear Units (ReLUs))。
使用ReLUs做为激活函数的卷积神经网络比起使用tanh单元作为激活函数的训练起来快了好几倍
这个结果从图1中可以看出来,该图展示了对于一个特定的四层CNN,CIFAR-10数据集训练中的误差率达到25%所需要的迭代次数。
从这张图的结果可以看出,如果我们使用传统的饱和神经元模型来训练CNN,那么我们将无法为这项工作训练如此大型的神经网络。

在这里插入图片描述

图 1:
带有 ReLUs(实线)的四层卷积神经网络在 CIFAR-10 上达到 25% 的训练错误率,比带有 tanh神经元的等效网络(虚线)快 6倍。
每个网络的学习率都是独立选择的,以使训练尽可能快。
没有采用任何形式的正则化。
这里展示的效果的大小因网络架构而异,但具有 ReLU的网络始终比具有饱和神经元的等效网络学习速度快几倍。

我们并不是第一个考虑在CNN中替换掉传统神经元模型的。
例如,Jarrett等人[11]声称,非线性函数 f ( x ) = ∣ t a n h ( x ) ∣ f(x)=|tanh(x)| f(x)=tanh(x)在他们的对比度归一化问题上,再接上局部均值池化单元,在Caltech-101数据集上表现的非常好。
然而,在这个数据集中,主要担心的还是防止过拟合,所以他们观察到的效果与我们在使用ReLU时观察到的训练集的加速能力还是不一样。
加快训练速度对大型数据集上训练的大型模型的性能有很大的影响。

3.2 Training on Multiple GPUs

单个GTX 580 GPU只有3GB内存,这限制了可以在其上训练的网络的最大尺寸。
事实证明,120万个训练样本足以训练那些因规模太大而不适合使用一个GPU训练的网络。
因此,我们将网络分布在两个GPU上。目前的GPU很适合于跨GPU并行化操作,因为它们能够直接读写对方的内存,而无需通过主机内存。
我们采用的并行化方案基本上将半个内核(或神经元)放在各个GPU上,另外还有一个技巧:GPU只在某些层间进行通信。
这意味着,例如,第3层的内核从第2层的所有内核映射(kernel maps)中获取输入。
然而,第4层中的内核又仅从位于同一GPU上的第3层中的那些内核映射获取输入。
选择连接模式对于交叉验证是一个不小的问题,但这使得我们能够精确调整通信量,直到它的计算量的达到可接受的程度。
由此产生的架构有点类似于Cire¸san等人使用的“柱状”CNN[5],除了我们的每列不是独立的之外(见图2)。
与一个GPU上训练的每个卷积层只有一半的内核数量的网络相比,该方案分别将我们的top-1和top-5错误率分别降低了1.7%和1.2%。双GPU网络的训练时间比单GPU网络更少。

3.3 Local Response Normalization

ReLU具有理想的属性,它们不需要对输入进行归一化来防止它们饱和。
如果至少有一些训练实例为ReLU产生了正的输入,那么这个神经元就会学习。
然而,我们还是发现下面的这种归一化方法有助于泛化。
a x , y i a^i_{x,y} ax,yi表示第 i i i个内核计算 ( x , y ) (x,y) (x,y)位置的ReLU非线性单元的输出,而局部响应归一化(Local Response Normalization)的输出值定义为 b x , y i b^i_{x,y} bx,yi
b x , y i = a x , y i ( k + α ∑ j = m a x ( 0 , i − n / 2 ) m i n ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β b^i_{x,y}=\frac{a^i_{x,y}}{(k+\alpha\sum^{min(N-1,i+n/2)}_{j=max(0,i-n/2)}{{(a^j_{x,y}})^2})^\beta} bx,yi=(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)βax,yi

其中,求和部分公式中的 n n n表示同一个位置下与该位置相邻的内核映射的数量,而N表示这一层所有的内核数(即通道数)。
内核映射的顺序当然是任意的,并且在训练之前就已经定好了。
这种响应归一化实现了一种模仿真实神经元的横向抑制,从而在使用不同内核计算的神经元输出之间产生较大的竞争。
常数 k k k n n n α α α β β β都是超参数(hyper-parameters),它们的值都由验证集决定。
我们取 k = 2 k=2 k=2 n = 5 n=5 n=5 α = 1 0 − 4 α=10^{−4} α=104 β = 0.75 β=0.75 β=0.75
我们在某些层的应用ReLU后再使用这种归一化方法(参见第3.5节)。

这个方案与Jarrett等人[11]的局部对比归一化方案有些相似之处,但我们的被更准确地称为“亮度归一化”,因为我们没有减去均值。
响应归一化将我们的top-1和top-5的错误率分别降低了1.4%和1.2%。
我们还验证了这种方案在CIFAR-10数据集上的有效性:没有进行归一化的四层CNN实现了13%的测试错误率,而进行了归一化的则为11%。

3.4 Overlapping Pooling

CNN中的池化层汇集了相同内核映射中相邻神经元组的输出。
在传统方法中,相邻池化单元之间互不重叠(例如[17,11,4])。
更准确地说,一个池化层可以被认为是由一些间隔为 s s s个像素的池化单元组成的网格,每个都表示了一个以池化单元的位置为中心的大小为 z × z z×z z×z的邻域。
如果我们令 s = z s=z s=z,我们就可以得到CNN中常用的传统的局部池化。
如果我们令 s < z s<z s<z,我们将获得重叠池化。这是我们在整个网络中使用的, s = 2 s= 2 s=2 z = 3 z= 3 z=3
与非重叠方案 s = 2 s=2 s=2 z = 2 z=2 z=2相比,该方案分别将 top-1 和 top-5 错误率降低了 0.4% 和 0.3% ,产生等效尺寸的输出。
我们通常在训练期间观察到,具有重叠池的模型发生过拟合的可能性会小一些。

3.5 Overall Architecture

现在我们已经准备好描述CNN的整体架构了。
如图2所示,这个网络包含了八层权重;前五个是卷积层,其余三个为全连接层。
最后的全连接层的输出被送到1000维的softmax函数,其产生1000个类的预测。
我们的网络最大化多项逻辑回归目标,这相当于在预测的分布下最大化训练样本中正确标签对数概率的平均值。

第二,第四和第五个卷积层的内核仅与上一层存放在同一GPU上的内核映射相连(见图2)。
第三个卷积层的内核连接到第二层中的所有内核映射。
全连接层中的神经元连接到前一层中的所有神经元。
响应归一化层紧接着第一个和第二个卷积层。
在3.4节中介绍的最大池化层,后面连接响应归一化层以及第五个卷积层。
将ReLU应用于每个卷积层和全连接层的输出。

第一个卷积层的输入为224×224×3的图像,对其使用96个大小为11×11×3、步长为4(步长表示内核映射中相邻神经元感受野中心之间的距离)的内核来处理输入图像。
第二个卷积层将第一个卷积层的输出(响应归一化以及池化)作为输入,并使用256个内核处理图像,每个内核大小为5×5×48。
第三个、第四个和第五个卷积层彼此连接而中间没有任何池化或归一化层。
第三个卷积层有384个内核,每个的大小为3×3×256,其输入为第二个卷积层的输出。
第四个卷积层有384个内核,每个内核大小为3×3×192。
第五个卷积层有256个内核,每个内核大小为3×3×192。
全连接层各有4096个神经元。

4 Reducing Overfitting

4.1 Data Augmentation

减小过拟合的最简单且最常用的方法就是,使用标签保留转换(label-preserving transformations,例如[25,4,5]),人为地放大数据集。
我们采用两种不同形式的数据增强方法,它们都允许通过很少的计算就能从原始图像中生成转换图像,所以转换后的图像不需要存储在硬盘上。
在我们实现过程中,转换后的图像是使用CPU上的Python代码生成的,在生成这些转换图像的同时,GPU还在训练上一批图像数据。
所以这些数据增强方案实际上是很高效的。

数据增强的第一种形式包括平移图像和水平映射
我们通过从256×256图像中随机提取224×224的图像块(及其水平映射)并在这些提取的图像块上训练我们的网络来做到这一点。
这使我们的训练集的规模增加了2048倍,尽管由此产生的训练样本当然还是高度相互依赖的。
如果没有这个方案,我们的网络就可能会遭受大量的的过拟合,可能会迫使我们不得不使用更小的网络。
在测试时,网络通过提取5个224×224的图像块(四个角块和中心块)以及它们的水平映射(因此总共包括10个块)来进行预测,并求网络的softmax层的上的十个预测结果的均值。

第二种形式的数据增强包括改变训练图像中RGB通道的灰度
具体而言,我们在整个ImageNet训练集的图像的RGB像素值上使用PCA
对于每个训练图像,我们添加多个通过PCA找到的主成分,大小与相应的特征值成比例,乘以一个随机值,该随机值属于均值为0、标准差为0.1的高斯分布。
因此,对于每个图像的RGB像素有: I x y = [ I x y R I x y G I x y B ] T I_{xy}=[I^R_{xy} \quad I^G_{xy} \quad I^B_{xy}]^T Ixy=[IxyRIxyGIxyB]T,我们加入如下的值:
[ p 1 p 2 p 3 ]   [ α 1 λ 1 α 2 λ 2 α 3 λ 3 ] T [p1 \quad p2 \quad p3] \ [α_1λ_1 \quad α_2λ_2 \quad α_3λ_3]^T [p1p2p3] [α1λ1α2λ2α3λ3]T

其中, p i p_i pi λ i λ_i λi分别是3x3的RGB协方差矩阵的第 i个特征向量和第i个的特征值,而 α i α_i αi是前面所说的随机值。
对于一张特定图像中的所有像素,每个 α i α_i αi只会被抽取一次,直到这张图片再次用于训练时,才会重新提取随机变量。
这个方案近似地捕捉原始图像的一些重要属性,对象的身份不受光照的强度和颜色变化影响。
这个方案将top-1错误率降低了1%以上。

4.2 Dropout

结合许多不同模型的预测结果是减少测试错误率的一种非常成功的方法[1,3],但对于已经花费数天时间训练的大型神经网络来说,它似乎成本太高了。
然而,有一个非常有效的模型组合版本,在训练期间只需花费大约两倍。
这个新发现的技术叫做“Dropout”[10],它会以50%的概率将隐含层的神经元输出置为0。
以这种方法被置0的神经元不参与网络的前馈和反向传播。
因此,每次给网络提供了输入后,神经网络都会采用一个不同的结构,但是这些结构都共享权重。
这种技术减少了神经元的复杂适应性,因为神经元无法依赖于其他特定的神经元而存在。
因此,它被迫学习更强大更鲁棒的功能,使得这些神经元可以与其他神经元的许多不同的随机子集结合使用。
在测试时,我们试着使用了所有的神经元,并将它们的输出乘以0.5。这与采用大量dropout的网络产生的预测结果分布的几何均值近似。

我们在图2中的前两个全连接层上使用了dropout
没有dropout,我们的网络会出现严重的过拟合。
Dropout大概会使达到收敛的迭代次数翻倍。

5 Details of learning

我们使用随机梯度下降法来训练我们的模型,每个batch有128个样本,动量(momentum)为0.9权重衰减(weight decay)为0.0005
我们发现这种较小的权重衰减对于模型的训练很重要。
换句话说,权重衰减在这里不仅仅是一个正则化方法:它减少了模型的训练误差。
权重 ω ω ω的更新法则是:
v i + 1 : = 0.9 ⋅ v i − 0.0005 ⋅ ϵ ⋅ ω i − ϵ ⋅ ⟨ ∂ L ∂ ω ∣ ω i ⟩ D i v_{i+1}:=0.9⋅v_i−0.0005⋅ϵ⋅ω_i−ϵ⋅⟨\frac{∂L}{∂ω}|_{ω_i}⟩_{D_i} vi+1:=0.9vi0.0005ϵωiϵωLωiDi
ω i + 1 : = ω i + v i + 1 ω_{i+1}:=ω_i+v_{i+1} ωi+1:=ωi+vi+1

其中, i i i表示当前的迭代次数, v v v表示动量(momentum), ε ε ε表示学习率, ⟨ ∂ L ∂ ω ∣ ω i ⟩ D i ⟨\frac{∂L}{∂ω}|_{ω_i}⟩_{D_i} ωLωiDi是第 i i i批次的目标函数关于 w w w的导数( w i w_i wi的偏导数) D i D_i Di的平均值。

我们使用标准差为0.01、均值为0的高斯分布来初始化各层的权重
我们使用常数1来初始化了网络中的第二个、第四个和第五个卷积层以及全连接层中的隐含层中的所有偏置参数
这种初始化权重的方法通过向ReLU提供了正的输入,来加速前期的训练
我们使用常数0来初始化剩余层中的偏置参数
我们对所有层都使用相同的学习率,在训练过程中又手动进行了调整
我们遵循的启发式方法是:以当前的学习速率训练,验证集上的错误率停止降低时,将学习速率除以10
学习率初始时设为0.01,并且在终止前减少3次
我们使用120万张图像的训练集对网络进行了大约90次迭代的训练,这在两块NVIDIA GTX 580 3GB GPU上花费了大约5到6天的时间。

6 Results

在这里插入图片描述
在这里插入图片描述

7 Discussion

我们的研究结果表明,一个大的深层卷积神经网络能够在纯粹使用监督学习的情况下,在极具挑战性的数据集上实现破纪录的结果。
值得注意的是,如果移除任何一个卷积层,网络的性能就会下降。
例如,删除任何中间层的结果会导致网络性能的top-1错误率下降2%。因此网络的深度对于实现我们的结果真的很重要。

为了简化我们的实验,我们没有使用任何无监督的预训练方法,尽管这样可能会有所帮助,特别是如果我们获得了足够的计算能力来显著地增加网络的大小而不会相应地增加已标记数据的数量。
到目前为止,我们的结果已经获得了足够的进步,因为我们已经使网络更大,并且训练了更长时间。
但我们仍然有很大的空间去优化网络,使之能够像人类的视觉系统一样感知。
最后,我们希望对视频序列使用非常大的深度卷积神经网路,其中时间结构提供了非常有用的信息,这些信息往往在静态图像中丢失了,或者说不太明显。

References

[1] R.M. Bell and Y. Koren. Lessons from the netflix prize challenge. ACM SIGKDD Explorations Newsletter,9(2):75–79, 2007.
[2] A. Berg, J. Deng, and L. Fei-Fei. Large scale visual recognition challenge 2010. www.imagenet.org/challenges. 2010.
[3] L. Breiman. Random forests. Machine learning, 45(1):5–32, 2001.
[4] D. Cire¸san, U. Meier, and J. Schmidhuber. Multi-column deep neural networks for image classification. Arxiv preprint arXiv:1202.2745, 2012.
[5] D.C. Cire¸san, U. Meier, J. Masci, L.M. Gambardella, and J. Schmidhuber. High-performance neural networks for visual object classification. Arxiv preprint arXiv:1102.0183, 2011.
[6] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09, 2009.
[7] J. Deng, A. Berg, S. Satheesh, H. Su, A. Khosla, and L. Fei-Fei. ILSVRC-2012, 2012. URL http://www.image-net.org/challenges/LSVRC/2012/.
[8] L. Fei-Fei, R. Fergus, and P. Perona. Learning generative visual models from few training examples: An incremental bayesian approach tested on 101 object categories. Computer Vision and Image Understanding, 106(1):59–70, 2007.
[9] G. Griffin, A. Holub, and P. Perona. Caltech-256 object category dataset. Technical Report 7694, California Institute of Technology, 2007. URL ttp://authors.library.caltech.edu/7694.
[10] G.E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever, and R.R. Salakhutdinov. Improving neural networks by preventing co-adaptation of feature detectors. arXiv preprint arXiv:1207.0580, 2012.
[11] K. Jarrett, K. Kavukcuoglu, M. A. Ranzato, and Y. LeCun. What is the best multi-stage architecture for object recognition? In International Conference on Computer Vision, pages 2146–2153. IEEE, 2009.
[12] A. Krizhevsky. Learning multiple layers of features from tiny images. Master’s thesis, Department of Computer Science, University of Toronto, 2009.
[13] A. Krizhevsky. Convolutional deep belief networks on cifar-10. Unpublished manuscript, 2010.
[14] A. Krizhevsky and G.E. Hinton. Using very deep autoencoders for content-based image retrieval. In ESANN, 2011.
[15] Y. Le Cun, B. Boser, J.S. Denker, D. Henderson, R.E. Howard, W. Hubbard, L.D. Jackel, et al. Handwritten digit recognition with a back-propagation network. In Advances in neural information processing systems, 1990.
[16] Y. LeCun, F.J. Huang, and L. Bottou. Learning methods for generic object recognition with invariance to pose and lighting. In Computer Vision and Pattern Recognition, 2004. CVPR 2004. Proceedings of the 2004 IEEE Computer Society Conference on, volume 2, pages II–97. IEEE, 2004.
[17] Y. LeCun, K. Kavukcuoglu, and C. Farabet. Convolutional networks and applications in vision. In Circuits and Systems (ISCAS), Proceedings of 2010 IEEE International Symposium on, pages 253–256. IEEE, 2010.
[18] H. Lee, R. Grosse, R. Ranganath, and A.Y. Ng. Convolutional deep belief networks for scalable unsupervised learning of hierarchical representations. In Proceedings of the 26th Annual International Conference on Machine Learning, pages 609–616. ACM, 2009.
[19] T. Mensink, J. Verbeek, F. Perronnin, and G. Csurka. Metric Learning for Large Scale Image Classification: Generalizing to New Classes at Near-Zero Cost. In ECCV - European Conference on Computer Vision, Florence, Italy, October 2012.
[20] V. Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. In Proc. 27th International Conference on Machine Learning, 2010.
[21] N. Pinto, D.D. Cox, and J.J. DiCarlo. Why is real-world visual object recognition hard? PLoS computational biology, 4(1):e27, 2008.
[22] N. Pinto, D. Doukhan, J.J. DiCarlo, and D.D. Cox. A high-throughput screening approach to discovering good forms of biologically inspired visual representation. PLoS computational biology, 5(11):e1000579, 2009.
[23] B.C. Russell, A. Torralba, K.P. Murphy, and W.T. Freeman. Labelme: a database and web-based tool for image annotation. International journal of computer vision, 77(1):157–173, 2008.
[24] J. Sánchez and F. Perronnin. High-dimensional signature compression for large-scale image classification. In Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on, pages 1665–1672. IEEE, 2011.
[25] P.Y. Simard, D. Steinkraus, and J.C. Platt. Best practices for convolutional neural networks applied to visual document analysis. In Proceedings of the Seventh International Conference on Document Analysis and Recognition, volume 2, pages 958–962, 2003.
[26] S.C. Turaga, J.F. Murray, V. Jain, F. Roth, M. Helmstaedter, K. Briggman, W. Denk, and H.S. Seung. Convolutional networks can learn to generate affinity graphs for image segmentation. Neural Computation, 22(2):511–538, 2010.

AlexNet网络

3.1 AlexNet网络结构详解与花分类数据集下载
在这里插入图片描述

亮点

  • 首次使用GPU进行网络加速训练。
  • 使用ReLU激活函数,解决求导麻烦、梯度消失问题。
  • 使用LRN局部响应归一化。
  • 在全连接层前两层中使用Dropout随机失活神经元操作,以减少过拟合。

AlexNet网络结构

经卷积后的矩阵尺寸大小:N = (W-F+(P1+P2))/S + 1
输入图片大小 W×W
Filter大小 F×F
步长 S
padding的像素数(垂直、水平方向):P1,P2
padding=1表示上下左右各1;
padding=(1,2)表示上下各1,左右各2;
np.ZeroPad2d((1,2,1,2))表示左1右2上1下2;
N为非整数时,向下取整。

  • Conv1
    input_size: [224, 224, 3]
    kernels: 48*2=96
    kernel_size: 11
    padding: [1, 2]
    stride: 4

N = (224-11+(1+2))/4+1 = 55

  • output_size: [55, 55, 96]

  • Maxpool1
    input_size: [55, 55, 96]
    kernel_size: 3
    padding: 0
    stride: 2

N = (55-3+(0+0))/2+1 = 27

  • output_size: [27, 27, 96]

  • Conv2
    input_size: [27, 27, 96]
    kernels: 128*2=256
    kernel_size: 5
    padding: [2, 2]
    stride: 1

N = (27-5+(2+2))/1+1 = 27

  • output_size: [27, 27, 256]

  • Maxpool2
    input_size: [27, 27, 256]
    kernel_size: 3
    padding: 0
    stride: 2

N = (27-3+(0+0))/2+1 = 13

  • output_size: [13, 13, 256]

  • Conv3
    input_size: [13, 13, 256]
    kernels: 192*2=384
    kernel_size: 3
    padding: [1, 1]
    stride: 1

N = (13-3+(1+1))/1+1 = 13

  • output_size: [13, 13, 384]

  • Conv4
    input_size: [13, 13, 384]
    kernels: 192*2=384
    kernel_size: 3
    padding: [1, 1]
    stride: 1

N = (13-3+(1+1))/1+1 = 13

  • output_size: [13, 13, 384]

  • Conv5
    input_size: [13, 13, 384]
    kernels: 128*2=256
    kernel_size: 3
    padding: [1, 1]
    stride: 1

N = (13-3+(1+1))/1+1 = 13

  • output_size: [13, 13, 256]

  • Maxpool3
    input_size: [13, 13, 256]
    kernel_size: 3
    padding: 0
    stride: 2

N = (13-3+(0+0))/2+1 = 6

  • output_size: [6, 6, 256]

  • 之后是三个全连接层

使用pytorch搭建AlexNet并训练花分类数据集

3.2 使用pytorch搭建AlexNet并训练花分类数据集

下载源码

github代码:pytorch_classification/Test2_alexnet

下载数据集

dataset

# 数据集划分
python split_data.py
  • 1
  • 2

pycharm下调试运行

train.py训练
  • 验证集准确率达到69.8%
    在这里插入图片描述
predict.py预测
  • 在网络上下在一张玫瑰图片保存为…/rose.jpg
  • 预测结果:表示该图片是rose的可能性最大,概率为0.602
    在这里插入图片描述
  • 在网络上下在一张郁金香图片保存为…/tulip.jpg
  • 预测结果:表示该图片是tulip的可能性最大,概率为0.844
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/546167
推荐阅读
相关标签
  

闽ICP备14008679号