AlexNet模型

AlexNet深度解析
本文详细介绍2012年ImageNet竞赛冠军模型AlexNet的设计理念、数据集使用、激活函数选择、网络结构组成及Dropout策略应用等内容。

简介

2012年,Alex Krizhevsky及其同学Ilya Sutskever在多伦多大学Geoff Hinton的实验室设计了一个深层的卷积神经网络,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5 error rate 15.3%,第二名为26.2%),这在学术界引起了很大的轰动,大家争先恐后地研究深度神经网络,带来了深度学习的大爆发。之后的ImageNet冠军都是用CNN来做的,并且层次越来越深。

数据集

  实验采用的数据集是ImageNet,它有超过1500万张人工标注好的高分辨率的图片,分别属于约22000个类别。ImageNet的图片全部来自网络,并通过亚马逊的Mechanical Turk众包服务进行了人工标注。自2010年开始举办ILSVRC比赛,每年一次。ILSVRC用的是ImageNet的一个子集,总共有1000个类别,每个类别大约有1000张图片,其中训练集有约120万张图片,验证集约5万张图片,测试集约15万张图片。ImageNet比赛会给出2个错误率,top-1和top-5,top-5错误率是指你的模型预测的概率最高的5个类别中都不包含正确的类别。

激活函数

神经元的激活函数通常选择sigmoid函数或tanh函数,但在AlexNet中用的却是max(0, x)函数,它的名字叫Rectified Linear Unit (ReLU)。用这个激活函数的神经网络的训练速度要比用传统激活函数的神经网络快数倍。4层的卷积神经网络在CIFAR-10数据集上训练达到25%的错误率。

网络结构

基本结构如下图:

这里写图片描述

a. 共有8层,其中前5层convolutional,后边3层full-connected ,最后的一个full-connected层的output是具有1000个输出的softmax,最后的优化目标是最大化平均的multinomial logistic regression

b. 在第一层conv1和conv2之后直接跟的是Response-nomalization layer,也就是norm1,norm2层。

c. 在每一个conv层以及full-connected层后紧跟的操作是ReLU操作。

d. Max pooling操作是紧跟在第一个norm1,norm2,以及第5个conv层,也就是conv5

e.Dropout操作是在最后两个full-connected层。

Dropout策略

使用多个model来共同进行预测是一个降低test errors的基本方法,但是单独的训练多个model组合会导致整个的训练成本增加,毕竟训练一个单一的网络需要很长的时间,即便计算资源足够,在不影响精度的情况下降低整个运算时间还是我们追求的目标。

由此Hinton提出了dropout策略,这个策略很简单,对于每一个隐层的output,以50%的概率将他们设置为0,不再对于forward或者backward的过程起任何作用。对于每一个input来说,使用的不同的网络结构,但是权重是共享的。这样求得的参数能够适应不同的情况下的网络结构,也就是提高了系统的泛化能力。

在AlexNet中最后的两个full-connected层中使用了这个策略。

网络各层次阶段

1.conv1阶段DFD(data flow diagram):

这里写图片描述

2.conv2阶段DFD(data flow diagram):

这里写图片描述

3.conv3阶段DFD(data flow diagram):

这里写图片描述

4.conv4阶段DFD(data flow diagram):

这里写图片描述

5.conv5阶段DFD(data flow diagram):

这里写图片描述

6.fc6阶段DFD(data flow diagram):

这里写图片描述

7.fc7阶段DFD(data flow diagram):

这里写图片描述

8.fc8阶段DFD(data flow diagram):

这里写图片描述

### AlexNet模型结构及实现 AlexNet 是深度学习领域中一种经典的卷积神经网络(CNN)模型,由 Alex Krizhevsky 等人在 2012 年提出。该模型在 ImageNet 图像分类竞赛中取得了突破性成果,极大地推动了深度学习在计算机视觉领域的发展。以下是 AlexNet 的详细结构及其实现方法。 #### 一、AlexNet 模型结构详解 AlexNet 的网络结构包含多个卷积层、池化层和全连接层。具体结构如下: 1. **Conv1**:第一个卷积层,输入图像尺寸为 $227 \times 227 \times 3$,使用 11×11 的卷积核,步长为 4,输出特征图尺寸为 $55 \times 55 \times 96$[^3]。 2. **Maxpool1**:最大池化层,使用 3×3 的池化窗口,步长为 2,输出特征图尺寸为 $27 \times 27 \times 96$[^3]。 3. **Conv2**:第二个卷积层,使用 5×5 的卷积核,输出特征图尺寸为 $27 \times 27 \times 256$[^3]。 4. **Maxpool2**:最大池化层,使用 3×3 的池化窗口,步长为 2,输出特征图尺寸为 $13 \times 13 \times 256$[^3]。 5. **Conv3**:第三个卷积层,使用 3×3 的卷积核,输出特征图尺寸为 $13 \times 13 \times 384$。 6. **Conv4**:第四个卷积层,使用 3×3 的卷积核,输出特征图尺寸为 $13 \times 13 \times 384$[^3]。 7. **Conv5**:第五个卷积层,使用 3×3 的卷积核,输出特征图尺寸为 $13 \times 13 \times 256$[^3]。 8. **Maxpool3**:最大池化层,使用 3×3 的池化窗口,步长为 2,输出特征图尺寸为 $6 \times 6 \times 256$。 9. **Full connection1**:第一个全连接层,包含 4096 个神经元。 10. **Full connection2**:第二个全连接层,包含 4096 个神经元。 11. **Full connection3**:第三个全连接层,输出类别数(例如 ImageNet 数据集中的 1000 类别)。 #### 二、AlexNet 模型代码实现 以下是一个基于 PyTorch 的 AlexNet 模型实现示例: ```python import torch import torch.nn as nn class AlexNet(nn.Module): def __init__(self, num_classes=1000): super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=0), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), ) self.avgpool = nn.AdaptiveAvgPool2d((6, 6)) self.classifier = nn.Sequential( nn.Dropout(), nn.Linear(256 * 6 * 6, 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 = self.avgpool(x) x = torch.flatten(x, 1) x = self.classifier(x) return x ``` #### 三、训练方法 训练 AlexNet 模型时需要注意以下几点: 1. **数据增强**:通过随机裁剪、水平翻转等技术增加数据多样性,减少过拟合[^1]。 2. **ReLU 激活函数**:使用 ReLU 激活函数加速收敛,并避免梯度消失问题[^2]。 3. **Dropout**:在全连接层中使用 Dropout 技术防止过拟合。 4. **GPU 并行训练**:利用 GPU 加速训练过程,提高效率[^1]。 5. **局部响应归一化**:在某些卷积层后应用局部响应归一化以增强泛化能力[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值