AlexNet

1、AlexNet网络结构(NIPS2012):    

    AlexNet由5个卷积层+3个全连接层组成(不包括LRN层和最大池化层),输入图像大小为224*224*3,第一个卷积层为96个11*11*3的卷积核,步长为4。第二个卷积层为256个5*5*48的卷积核,步长为1。第三个卷积层为384个3*3*256的卷积核,步长为1。第四个卷积层为384个3*3*192个卷积核,步长为1。第五个卷积层为256个3*3*192个卷积核,步长为1。第六个全连接层有2048个神经元,第七个全连接层有2048个神经元,第八个全连接层有1000个神经元,最后是一个softmax回归。

  第二个、第四个和第五个卷积层只与前面一层的相同GPU上的神经元有连接,而第三个卷积层以及最后三个全连接层与前面一层的两块GPU上的所有神经元有连接。局部响应归一化层(LRN)跟随在第一个卷积层和第二个卷积层之后,最大池化层跟随在LRN层之后和第五个卷积层之后。每个卷积层和全连接层之后都跟着一个ReLU的激活函数。此外,前两个全连接层使用了Dropout技术,以0.5的概率忽略掉了一些神经元。 整个网络有6000万个参数,有65000个神经元。

2、数据增强和训练

  ImageNet包含1500万标注的高分辨率的图像,属于22000个类别,在每年一度的ILSVRC比赛中,使用的数据集为ImageNet的一个子集,大约有1000个类别,每个类别1000张图片。总的来说,有120万张训练图片,50000张验证集图片和150000张测试集图片。AlexNet的实验大部分是在ILSVRC2010的实验中做的。由于ImageNet的图像大小是不同的,我们先对原始图片进行缩放,使得图片最小边为256,然后再从中裁剪出256*256的图片。除了减去图像像素均值以外,我们不对图像做任何处理,这样就得到了我们的原始训练集。

  AlexNet做了两个方面的数据增强:第一个是从256*256的图像中随机裁剪出224*224的图像块(并且增加水平翻转),这样的话一张256*256的图片可以转换出2048张224*224的图片,极大的增强了数据集的大小。在做测试的时候,从256*256的图片中的四个角加一个中心裁剪出5张224*224的图片(并做水平翻转),得到10张图片变种,最后的softmax值是这10张图片变种的平均值。第二个数据增强方式是改变训练图像的RGB通道的强度,具体来说,先对所有训练集的的RGB像素值做PCA,然后对于每张训练图片,我们对其加上主成成分的倍数,它的幅度与对应的特征值乘以一个随机变量成比例,这个随机变量取自均值为0方差为0.1的高斯分布。因此对于图像的每个RGB像素值,我们对它加上:

            

  其中是RGB像素3*3协方差矩阵的特征向量和特征值,是上述的随机变量,每张训练图像的相同直到这张图像用于第二次训练。该方案近似地捕获自然图像的重要特性,即对于光照的颜色和强度的改变,物体的类别是不变的。该方案将前top1的错误率降低了1%以上。

  我们用均值为0方差为0.01的高斯分布来初始化所有网络层的权重。第二、第四和第五个卷积层的偏置初始化为1,其它层的偏置初始化为0。训练时使用随机梯度下降法来训练,batchsize为128,momentum为0.9,weight decay为0.0005。对所有网络层使用相同的学习率,并在训练时手动调整学习率,学习率初始化为0.01,当验证误差在当前学习率不再改变时,我们把学习率除以10,当调整学习率达到三次时,我们终止训练。整个训练过程约90个epoch,120万张图片。

3、实验结果

    ILSVRC2010上的top1的错误率为37.5%,top5的错误率为17.0%。

  

4、参考

AlexNet官方代码:https://github.com/tensorflow/models/blob/master/tutorials/image/alexnet/alexnet_benchmark.py

论文:《ImageNet Classification with Deep Convolutional Neural Networks》

### AlexNet 深度学习模型使用指南与代码实现 #### 一、AlexNet 的背景介绍 AlexNet 是由 Alex Krizhevsky 提出的一种卷积神经网络,在 ImageNet LSVRC-2010 比赛中取得了显著的成绩并远超第二名,这标志着深度学习在图像分类领域的突破性进展[^3]。它的成功不仅验证了深度学习提取特征的能力优于传统手工设计的方,还推动了后续一系列 CNN 架构的研究与发展。 #### 二、AlexNet 的主要特点 以下是 AlexNet 的几个核心特性及其优势: 1. **ReLU 激活函数** ReLU (Rectified Linear Unit) 被用于激活隐藏单元,相比传统的 Sigmoid 和 Tanh 函数,ReLU 不会遇到梯度消失问题,并能加速训练过程中的收敛速度[^3]。 2. **数据增强技术** AlexNet 利用了多种数据增强手段来扩充训练集规模,例如随机裁剪、水平翻转以及颜色变换等操作。这些方有效提升了模型的泛化能力,降低了过拟合风险[^1]。 3. **Dropout 技术的应用** Dropout 方被引入到全连接层部分以减少过拟合现象的发生。通过随机丢弃一部分神经元的方式增加模型鲁棒性和防止参数间过度依赖关系形成[^1]。 4. **多GPU 并行计算支持** 原始版本实现了跨两个 NVIDIA GTX 580 GPUs 上分布式运行的设计理念,从而大幅缩短了整体训练时间成本。 #### 三、AlexNet 完整代码实现 下面提供了一个基于 PyTorch 实现的标准 AlexNet 结构: ```python import torch.nn as nn import torch.optim as optim class AlexNet(nn.Module): def __init__(self, num_classes=1000): # 默认设置为ImageNet类别数量 super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2), # 输入通道数设为3(RGB图片) 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.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 = x.view(-1, 256 * 6 * 6) # 展平处理 x = self.classifier(x) return x # 创建实例对象 model = AlexNet() criterion = nn.CrossEntropyLoss() # 设置损失函数交叉熵误差适合多类别的分类任务 optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 使用SGD优化器配置初始学习率和动量项系数 ``` 以上展示了如何构建一个基本版次的Pytorch框架下的alexnet架构定义文件;当然实际项目开发当中还需要考虑更多细节比如加载预训练权重或者调整输入尺寸适应不同分辨率需求等问题。 #### 四、注意事项 当尝试复刻或改进该算时需要注意以下几点事项: - 数据准备阶段应严格按照官方描述执行相应的前处理步骤; - 如果硬件资源有限,则可能需要降低batch size大小或是简化原结构复杂程度以便顺利完成整个流程运转工作; - 训练过程中密切关注loss变化趋势曲线图以及其他评估指标表现情况及时作出相应策略调整决策。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值