卷积神经网络-AlexNet

alexnet · 浏览次数 : 0

小编点评

本文主要介绍了深度学习模型AlexNet的前置知识,包括Top-1和Top-5错误率的定义、max-pooling层的原理、全连接层的结构、1000-way softmax的应用、非饱和神经元的概念以及Dropout技术的应用。此外,还提到了网络结构的优化和算法实现的细节。 1. **Top-1和Top-5错误率**:Top-1错误率是指在最后的n个预测结果中,只有预测概率最大对应的类别是正确答案才算预测正确;Top-5错误率则是要求在最后的n个预测结果中,只要预测概率最大的前五个中含有正确答案就算预测正确。 2. **max-pooling层**:max-pooling层又称为subsampling,主要作用是减少图像的高度和长度,而深度(宽度)则不会改变。 3. **全连接层**:全连接层中的每个神经元都与前一层的所有神经元相连接,通过权重和偏置项调节信息传递的强度。 4. **1000-way softmax**:这是一种特殊的全连接层,包含1000个未归一化的输出,通过softmax转换向量为概率分布。 5. **非饱和神经元**:非饱和神经元避免了深度学习中神经元饱和现象,防止梯度消失,有助于模型训练。 6. **Dropout**:Dropout技术在训练时以一定概率将输入置0,输出时接受所有神经元的输出,但要乘以概率(1-p),以提高模型的泛化能力。 7. **网络结构优化**:文章提到采用双GPU训练方法,并有信息融合,但输出的图像维度有误,应为224x224x3。 8. **算法实现**:文章最后提供了AlexNet模型的Python实现代码,包括初始化权重和前向、反向传播的过程。

正文

AlexNet

一些前置知识

top-1 和top-5错误率

top-1错误率指的是在最后的n哥预测结果中,只有预测概率最大对应的类别是正确答案才算预测正确。
top-5错误率指的是在最后的n个预测结果中,只要预测概率最大的前五个中含有正确答案就算预测正确。

max-pooling层

最大池化又叫做subsampling,其主要作用是减少图像的高度和长度而深度(宽度)则不会改变。下面是一个列子:

fully-connect层

在全连接层中,其每个神经元都与前一层的所有神经元相连接,每个连接都有一个权重用于调节信息传递的强度,并且每个神经元还有一个偏置项。

1000-way softmax

它其实也属于全连接层,这个层原本包含1000个未归一化的输出,而softmax将这个向量转换为概率分布。计算方式如下:

\[P(y_i) = \frac{e^{z_i}}{\sum_{j = 1}^{1000}e^{z_j}} \]

non-saturating neurons

非饱和神经元是深度学习中一种设计神经元的理念,目的是避免神经元在训练过程中出现饱和现象。饱和现象会导致梯度消失,进而使得模型难以训练。下面是一些常见的非饱和激活函数:

  • ReLU
  • Leaky ReLU
  • ELU
  • SELU

dropout

在训练时以一定的概率将输入置0,输出时接受所有神经元的输出,但要乘以概率(1-p)。使得模型在每次前向和反向传播时都使用不同的子网络进行训练,从而提高模型的泛化能力。这种方法有效地减少了神经元之间的共适应性(co-adaptation),迫使网络的每个神经元在更具鲁棒性的特征上进行学习。

缺点:收敛速度可能变慢。

网络结构


由于这篇文章在提出时没有很好的GPU,估计显存不够?所有采用了双GPU训练的方法。具体来说上下两块GPU分别负责一般的参数,但是这其中也有信息的融合,比如第3、6,7层。其次这里输出的图像维度应该有误,应更正为2252253

算法实现

import torch.nn as nn
import torch

class AlexNet(nn.Module):
    def __init__(self, num_classes=1000, init_weights=False):
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 48, kernel_size=11, stride=4, padding=2),  # input[3, 224, 224]  output[48, 55, 55]
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),                  # output[48, 27, 27]
            nn.Conv2d(48, 128, kernel_size=5, padding=2),           # output[128, 27, 27]
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 13, 13]
            nn.Conv2d(128, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
            nn.ReLU(inplace=True),
            nn.Conv2d(192, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
            nn.ReLU(inplace=True),
            nn.Conv2d(192, 128, kernel_size=3, padding=1),          # output[128, 13, 13]
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 6, 6]
        )
        self.classifier = nn.Sequential(
            nn.Dropout(p=0.5),
            nn.Linear(128 * 6 * 6, 2048),
            nn.ReLU(inplace=True),
            nn.Dropout(p=0.5),
            nn.Linear(2048, 2048),
            nn.ReLU(inplace=True),
            nn.Linear(2048, num_classes),
        )
        if init_weights:
            self._initialize_weights()

    def forward(self, x):
        x = self.features(x)
        x = torch.flatten(x, start_dim=1)
        x = self.classifier(x)
        return x

    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                if m.bias is not None:
                    nn.init.constant_(m.bias, 0)
            elif isinstance(m, nn.Linear):
                nn.init.normal_(m.weight, 0, 0.01)
                nn.init.constant_(m.bias, 0)

与卷积神经网络-AlexNet相似的内容:

卷积神经网络-AlexNet

AlexNet 一些前置知识 top-1 和top-5错误率 top-1错误率指的是在最后的n哥预测结果中,只有预测概率最大对应的类别是正确答案才算预测正确。 top-5错误率指的是在最后的n个预测结果中,只要预测概率最大的前五个中含有正确答案就算预测正确。 max-pooling层 最大池化又叫做

总结了6种卷积神经网络压缩方法

摘要:神经网络的压缩算法是,旨在将一个庞大而复杂的预训练模型(pre-trained model)转化为一个精简的小模型。 本文分享自华为云社区《卷积神经网络压缩方法总结》,作者:嵌入式视觉 。 我们知道,在一定程度上,网络越深,参数越多,模型越复杂,其最终效果越好。神经网络的压缩算法是,旨在将一个

头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解

> 本文全面探讨了卷积神经网络CNN,深入分析了背景和重要性、定义与层次介绍、训练与优化,详细分析了其卷积层、激活函数、池化层、归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强、损失函数、优化器、学习率调整、正则化技巧与模型评估调优。旨在为人工智能学者使用卷积神经网络CNN提供全面的指

使用卷积神经网络实现图片去摩尔纹

摘要:本项目主要介绍了如何使用卷积神经网络去检测翻拍图片,主要为摩尔纹图片;其主要创新点在于网络结构上,将图片的高低频信息分开处理。 本文分享自华为云社区《图片去摩尔纹简述与代码实现》,作者: 李长安。 1前言 当感光元件像素的空间频率与影像中条纹的空间频率接近时,可能产生一种新的波浪形的干扰图案,

基于卷积神经网络的MAE自监督方法

本文介绍ICLR2023的方法Spark,实现了基于CNN的MAE。

基于深度卷积神经网络的时间序列图像分类,开源、低功耗、低成本的人工智能硬件提供者

具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 卷积神经网络(CNN)通过从原始数据中自动学习层次特征表示,在图像识别任务中取得了巨大成功。虽然大多数时间序列分类(TSC)文献都集中在1D信号上,但本文使用递归图(RP)将时间序列转换为2D纹理

消除视觉Transformer与卷积神经网络在小数据集上的差距

摘要:本文通过多种操作构建混合模型,增强视觉Transformer捕捉空间相关性的能力和其进行通道多样性表征的能力,弥补了Transformer在小数据集上从头训练的精度与传统的卷积神经网络之间的差距。 本文分享自华为云社区《[NeurIPS 2022] 消除视觉Transformer与卷积神经网络

算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题,如下, 【问】神经元、权重、激活函数、参数、图片尺寸,卷积层、卷积核,特征图,平均池化,全家平均池化,全连接层、隐藏层,输出层 【完整问题】神

LeViT:Facebook提出推理优化的混合ViT主干网络 | ICCV 2021

论文提出了用于快速图像分类推理的混合神经网络LeVIT,在不同的硬件平台上进行不同的效率衡量标准的测试。总体而言,LeViT在速度/准确性权衡方面明显优于现有的卷积神经网络和ViT,比如在80%的ImageNet top-1精度下,LeViT在CPU上比EfficientNet快5倍 来源:晓飞的算

深度学习项目-MobileNetV2水果识别模型

本项目旨在研究利用深度学习模型进行水果图像分类的方法,具体包括两个主要任务:一是使用卷积神经网络(CNN)模型进行水果图片的分类,二是探索轻量级神经网络模型MobileNetV2在水果图像分类中的应用。