学习AlexNet(网络讲解+代码)

Alexnet介绍 AlexNet是一种深度卷积神经网络,由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年提出。它被广泛应用于计算机视觉领域的图像分类任务, 它是第一个在ImageNet大规模图像识别挑战赛上取得显著成功的深度学习模型。 阅读详情

AlexNet

(新手入门,如理解有误感谢指正)
论文地址
AlexNet是2012年ILSVRC的第一名
它的整体框架如图1所示:
图1

图1

首先整体概括一下AlexNet主要用到的一些技术方法:

  1. 使用ReLU作为非线性激活函数而非以往的sigmoid或tanh
  2. 采用了模型并行,将网络按照feature maps的深度一分为二放在两个GPU上训练
  3. 使用了Local Response Normalization(LRN)局部归一化
  4. 使用了重叠的池化层
  5. 防止过拟合采用了数据增强(Data Augmentation)和丢弃法(Dropout)

总共8层网络5层是卷积层,3层是全连接层,下面就按照图1逐层分析一下

卷积层特征图输出尺寸计算公式:
M = N − F + 2 P S + 1 M = \frac{N-F+2P}{S} + 1 M=SN−F+2P​+1
其中N是输入的尺寸,即 N × N N\times N N×N的输入,F是卷积核的尺寸,即 F × F F\times F F×F的卷积核,P是padding,S是stride步长

Input:

3 × 224 × 224 3\times 224\times 224 3×224×224的图片(C, H, W)

第一层:

1. 卷积层

卷积核个数96个

卷积核尺寸 3 × 11 × 11 3\times 11\times 11 3×11×11

步长S为4

无padding

输出feature maps的尺寸根据公式 224 − 11 + 0 4 + 1 ≈ 55 \frac{224-11+0}{4}+1\approx 55 4224−11+0​+1≈55,所以最终的尺寸应为 96 × 55 × 55 96\times 55 \times 55 96×55×55。

由于使用模型并行,这里按照深度一份为二,放在两个GPU上训练,那么每个GPU上的输出feature maps的尺寸为 96 2 × 55 × 55 = 48 × 55 × 55 \frac{96}{2}\times55\times55 = 48\times55\times 55 296​×55×55=48×55×55

图2
图2

2. ReLU

经过ReLU进行激活
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)
论文实验表明使用ReLU模型收敛更快
图3

图3

3. Max Pooling

采样核的尺寸是 3 × 3 3\times3 3×3

论文采用重叠Pooling,使用步长S为2

这样采样后的feature maps尺寸根据公式 55 − 3 + 0 2 + 1 = 27 \frac{55-3+0}{2}+1=27 255−3+0​+1=27,由于这一步操作是在各个GPU上独立操作,所以每个GPU上输出的feature maps尺寸均为 48 × 27 × 27 48\times27\times27 48×27×27

4. LRN归一化

采用下面这个公式进行归一化
在这里插入图片描述
简单来说就是上一步经过池化层后得到了feature maps,每个深度每个位置的值用 a x , y i a_{x,y}^i ax,yi​表示,也就是i深度(x, y)位置的值,然后经过公式处理,这个位置的值 a x , y i a_{x,y}^i ax,yi​变成了 b x , y i b_{x,y}^i bx,yi​

我们具体看一下过程是怎样的, k , α , β , n k, \alpha, \beta, n k,α,β,n是常数,是需要调的超参数,i,j就代表深度,n就是相邻的n个深度,N是总的深度
图4
图4

所以要计算 a x , y i a_{x,y}^i ax,yi​的归一化值实际上就是先把和它挨着的若干个深度相同位置的值(蓝色方格)求个平方加起来乘一个系数 α \alpha α再加一个系数k,再求 β \beta β次方,最后用 a x , y i a_{x,y}^i ax,yi​除以算出的这个数

最终论文中选取 k = 2 , n = 5 , α = 1 0 − 4 , β = 0.75 k=2, n=5, \alpha=10^{-4}, \beta=0.75 k=2,n=5,α=10−4,β=0.75

第二层:

1.卷积层

卷积核个数 256

卷积核尺寸 48 × 5 × 5 48\times5\times5 48×5×5

padding为2,步长S为1

这一层依然是再各个GPU上独立运算,所以256个卷积核实际分成了两部分,每个GPU上各128个卷积核

这样两个GPU上输出的feature maps尺寸为 27 − 5 + 2 × 2 1 + 1 = 27 \frac{27-5+2\times2}{1}+1=27 127−5+2×2​+1=27,注意上一层最后经过max pooling后的尺寸是 48 × 27 × 27 48\times27\times27 48×27×27,这样输出的尺寸每个GPU上均为 128 × 27 × 27 128\times27\times27 128×27×27
图5
图5

2. ReLU
3. Max Pooling

采样核的尺寸是 3 × 3 3\times3 3×3

论文采用重叠Pooling,使用步长S为2

这样采样后的feature maps尺寸根据公式 27 − 3 + 0 2 + 1 = 13 \frac{27-3+0}{2}+1=13 227−3+0​+1=13,由于这一步操作是在各个GPU上独立操作,所以每个GPU上输出的feature maps尺寸均为 128 × 13 × 13 128\times13\times13 128×13×13

4. LRN归一化

尺寸不变

第三层:

第三层比较有意思,前两层都是在各自GPU上单独运算,第三层则在两个GPU之间进行了运算,即进行了信息的交互

1. 卷积层

卷积核个数384

卷积核尺寸 256 × 3 × 3 256\times 3\times 3 256×3×3

步长S为1,padding为1

图6
图6

如图6我们可以知道,每个卷积核的深度256实际上是相当于把上一层两个GPU上的 128 × 13 × 13 128\times13\times13 128×13×13合在一起了,即 256 × 13 × 13 256\times13\times13 256×13×13的输入,为啥是13,图上是27,别忘了上一层经过max pooling了

这样我们计算输出feature maps的尺寸 13 − 3 + 2 1 + 1 = 13 \frac{13-3+2}{1}+1=13 113−3+2​+1=13,所以输出的尺寸为 384 × 13 × 13 384\times13\times13 384×13×13,然后我们再按照深度一分为二放到两个GPU,每个GPU的输出feature maps尺寸就变成图上的 192 × 13 × 13 192\times13\times13 192×13×13

2. ReLU

ReLU激活

第四层:

第四层和第一第二层一样,也是单独再各自GPU上独立运算

1. 卷积层

卷积核个数384,每个GPU上192个

卷积核尺寸 192 × 3 × 3 192\times3\times3 192×3×3

padding为1,步长S为1

输出尺寸 13 − 3 + 2 1 + 1 = 13 \frac{13-3+2}{1}+1=13 113−3+2​+1=13,每个GPU上的feature maps尺寸仍为 384 2 × 13 × 13 = 192 × 3 × 3 \frac{384}{2}\times13\times13=192\times3\times3 2384​×13×13=192×3×3

2. ReLU

ReLU激活
图7
图7

第五层:

1. 卷积层

卷积核个数256,每个GPU上128个

卷积核尺寸 192 × 3 × 3 192\times3\times3 192×3×3

步长padding均为1

输出尺寸 13 − 3 + 2 1 + 1 = 13 \frac{13-3+2}{1}+1=13 113−3+2​+1=13,每个GPU上的输出feature maps尺寸为 128 × 13 × 13 128\times13\times13 128×13×13

2. ReLU

ReLU激活
图8
图8

3. Max Pooling

采样核的尺寸是 3 × 3 3\times3 3×3

论文采用重叠Pooling,使用步长S为2

这样采样后的feature maps尺寸根据公式 13 − 3 + 0 2 + 1 = 6 \frac{13-3+0}{2}+1=6 213−3+0​+1=6,由于这一步操作是在各个GPU上独立操作,所以每个GPU上输出的feature maps尺寸均为 128 × 6 × 6 128\times6\times6 128×6×6,总共是 256 × 6 × 6 256\times6\times6 256×6×6

第六层:

从这一层开始到最后均为全连接层,从这里开始不再是每个GPU上单独运算,GPU之间也会进行全连接

1. 全连接层

共4096个神经元,每个GPU上2048个,和上一层 256 × 6 × 6 256\times6\times6 256×6×6个节点全连接

2. ReLU
3. Dropout

简单理解就是随机将激活后的节点输出值置为0,这样这些节点在本轮训练中将不再参与后面的前向传播和梯度回传,这样使得输出值不会严重依赖于某些节点和权重,使得学习更加均衡,避免过拟合

第七层:

1. 全连接层

共4096个神经元,每个GPU上2048个,和上一层4096个节点全连接

2. ReLU
3. Dropout

第八层:

1. 全连接层

共1000个神经元,即1000个输出,和上一层4096个节点全连接

2. softmax

计算预测类别的概率分布

图9
图9

下面使用pytorch实现一个简化的AlexNet,代码来源于李沐的动手学习深度学习的pytorch开源版本

该版本的AlexNet没有使用LRN归一化,在2015年Very Deep Convolutional Networks for Large-Scale Image Recognition. 这篇文章中提到LRN基本没什么用
图10图10

PyTorch Code:

import time
import torch
from torch import nn, optim
import torchvision

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

class AlexNet(nn.Module):
    def __init__(self):
        super(AlexNet, self).__init__()
        self.conv = nn.Sequential(
            # 这里不再使用模型并行将网络按照深度拆分,而是一个整体
            # 第一层
            nn.Conv2d(1, 96, 11, 4),  # in_channels, out_channels, kernel_size, stride, padding
            nn.ReLU(),
            nn.MaxPool2d(3, 2),  # kernel_size, stride
            # 第二层
            nn.Conv2d(96, 256, 5, 1, 2),
            nn.ReLU(),
            nn.MaxPool2d(3, 2),
            # 第三层
            nn.Conv2d(256, 384, 3, 1, 1),
            nn.ReLU(),
            # 第四层
            nn.Conv2d(384, 384, 3, 1, 1),
            nn.ReLU(),
            # 第五层
            nn.Conv2d(384, 256, 3, 1, 1),
            nn.ReLU(),
            nn.MaxPool2d(3, 2),
        )
        # 全连接层
        self.fc = nn.Sequential(
            # 根据上面的讲解这里按照论文中的应该是256*6*6
            # 但是我们在看论文中会发现第一层的卷积层计算出的尺寸实际上是54.25不能整除
            # 论文按55计算了,所以到了最后是256*6*6
            # 而pytorch应该是向下取整了,这里如果写256*6*6会出现size mismatch错误
            nn.Linear(256*5*5, 4096),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(4096, 4096),
            nn.ReLU(),
            nn.Dropout(0.5),
             # 输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000
            nn.Linear(4096, 10),
        )
        
    def forward(self, img):
        feature = self.conv(img)
        print(feature.shape)
        output = self.fc(feature.view(img.shape[0], -1))
        return output
CNN经典网络模型(二):AlexNet简介及代码实现(PyTorch超详细注释版) CNN经典网络模型之一:AlexNet,本文包含其简介及代码,在PyTorch中实现,进行超详细注释,适合新生小白阅读学习~ 阅读详情

相关推荐

深度学习AlexNet模型分析

深度学习AlexNet模型分析一、AlexNet背景二、AlexNet结构2.1 网络结构欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文...

Raywit的博客 9681

c++ 读写excel_每天10分钟,轻松入门python,json、csv等读写

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。这种数据在弄爬虫的时候,经常会见到这类型的数据。下面展示一个简单的json数据。{ 很想python的字典格式吧?键:值的对应关系。如果要操作json的模块,那么就需要用到json模块。Python与JSON相互转换#python...

weixin_39637256的博客 565

深度学习卷积CNN——Alexnet、VggNet、ResNet经典模型讲解等

通俗来讲,就是当今现在最牛叉模型SOTA(State of the Art)模型指的是在某一特定领域或任务中,当前表现最优、代表着该领域最高水平和最新技术发展状况的算法或模型。例如在图像识别领域中准确率最高的卷积神经网络,自然语言处理领域里理解能力最强的语言模型如 GPT 系列等。高性能指标:在公认的测试集上能取得最高的跑分等性能表现,如在 ImageNet 图像分类任务中准确率突破较高水平。创新性:会提出新方法,如改进模型架构或训练技巧,像 Transformer 架构就颠覆了传统的 RNN 架构。

joy1313_的博客 2908

深入理解AlexNet网络

AlexNet 论文:《ImageNet Classification with Deep Convolutional Neural Networks》 第一个典型的CNN是LeNet5网络结构,但是第一个引起大家注意的网络却是AlexNet,也就是文章《ImageNet Classification with Deep Convolutional Neural Networks》介绍的网络结...

PiggyGaGa的博客 24万+

6、深度学习中的参数添加与AlexNet网络应用

本文介绍了深度学习中参数添加的方法,重点讲解了addParameter函数的使用,并以AlexNet卷积神经网络为例,展示了其在图像分类、迁移学习和特征提取中的应用。此外,还探讨了AlexNet在C/C++和GPU代码生成中的支持情况,为深度学习应用提供了全面的技术解析。

red88的博客 52

[Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,后期结合深度学习研究图像识别、图像分类应用。上一篇文章分享了生成对抗网络GAN的基础知识,这篇文章将详细讲解如何利用Keras构建AlexNet和CNN模型,实现自定义数据集的图像分类,并进行详细的对比。希望对您有所帮助!让我们开始吧,且看且珍惜。

杨秀璋的专栏 6529

CNN网络模型——AlexNet(网络讲解和代码实现)

不管是卷积层还是池化层,我们都可以看成一种对特征的提取器。

qq_73075805的博客 1321

人工智能算法原理与代码实战:神经网络与深度学习

作者:禅与计算机程序设计艺术 1.背景介绍 近年来随着互联网的飞速发展,各行各业都在追求数字化转型,而人工智能(AI)作为新兴的技术领域,也越来越受到企业和科研人员的青睐。基于深度学习(Deep Learning)的算法更是迎来蓬勃发展时期。 人工智能算法原理与代码实战系列的《人工智能

AI天才研究院 239

Pytorch从入门到放弃(3)——迁移学习(基于AlexNet的蜜蜂和蚂蚁分类)

AlexNet是2012年的经典网络结构,日常实验这个模型基本就能满足需求。本人,十分偏爱这个网络模型,也许是上了岁数吧,老年人比较怀旧。文章下面介绍如何使用Pytorch来实现网络模型的精调,续上一篇博文实现基于AlexNet的蜜蜂和蚂蚁的分类,数据集下载和数据的预处理参见上一篇博文。 实现迁移学习之前,首先我们读取一下Pytorch封装的AlexNet所包含的网络结构:re...

澎湃de家夥的博客 4542

Nvidia Jetson-inference图像分割实战:FCN-Alexnet-Cityscapes-HD示例

Jetson-inference 是一个开源的深度学习工具包,由NVIDIA提供,专为边缘计算和嵌入式设备设计。它为开发者提供了一个易于使用的环境,让他们可以快速地在NVIDIA Jetson系列平台上部署深度学习模型。在本章中,我们将探讨该工具包的主要功能和特点,包括其支持的网络架构、模型优化以及部署流程等。通过介绍Jetson-inference,我们将为您构建一个坚实的基础,以便在后续章节中深入研究特定的网络模型和数据集。

weixin_36184718的博客 873

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6040

AlexNet

Alexnet学习记录

一去不复返的通信er 797

Python在Windows环境下驱动乐视三合一摄像头的深度图像处理实践

本文详细介绍了在Windows系统下,使用Python驱动乐视三合一摄像头进行深度图像处理的完整实践流程。从环境配置、驱动安装、OpenNI与OpenCV库的部署,到深度与彩色数据流的读取、可视化、三维点云转换以及背景移除等应用开发,为开发者提供了从零开始掌握深度摄像头编程的实战指南。

gitlab7runner的博客 232

图像识别的算法:从AlexNet到VGGNet

1.背景介绍 图像识别是计算机视觉领域的一个重要分支,它旨在识别图像中的对象、场景和特征。随着深度学习技术的发展,图像识别算法也逐渐从传统的手工工程学方法转向基于深度学习的自动学习方法。在这篇文章中,我们将从AlexNet到VGGNet的图像识别算法进行全面的介绍。 1.1 传统图像识别方法 传统的图像识别方法主要包括: 模板匹配(Template Matching):通过比较图像中的子...

AI天才研究院 1016

AirSim中图像API的应用

解析Airsim图像获取保存的api

fegxg的博客 1604

操作系统原理:【优麒麟】linux内核添加系统调用

在底端添加如下代码。

Joyce_zz的博客 2709

史上最详细的深度学习与神经网络讲解(三)

张量:是一个物理量,对高维 (维数 ≥ 2) 的物理量进行 “量纲分析” 的一种工具。简单的可以理解为:一 维数组称为矢量,二维数组为二阶张量,三维数组 为三阶张量。计算图:用“结点”(nodes)和“线”(edges)的有向图来 描述数学计算的图像。“节点” 一般用来表示施加 的数学操作,但也可以表示数据输入的起点/输出的 终点,或者是读取/写入持久变量的终点。“线”表 示“节点”之间的输入/输出关系。这些数据“线” 可以输运“size可动态调整”的多维数据数组,即 “张量”(tensor)。

weixin_51392874的博客 665

AUTOSAR Dem模块实战配置:从理论到代码生成的完整指南

本文提供了一份AUTOSAR Dem模块从理论到代码生成的完整实战配置指南。文章详细拆解了配置流程,涵盖Dem模块的核心角色、通用骨架搭建、事件与DTC映射、消抖机制配置,以及与BswM、EcuM、DCM等模块的联调方法,旨在帮助汽车电子工程师快速掌握诊断事件管理的关键配置步骤,生成可运行的代码。

3c4x5z6v7b的博客 455

《神经网络与深度学习》学习笔记(第2周)

卷积神经网络是一种优秀的处理图像的神经网络。一方面,卷积神经网络的权值的数量有所减小,使得网络易于优化,另一方面卷积神经网络的模型的复杂度有所减小、降低了过拟合的风险。卷积神经网络的包括卷积层、池化层、多输入多输出通道、池化层等。

ZhaoHuiXiYin_2的博客 884

西南科技大学模拟电子技术实验二(二极管特性测试及其应用电路)预习报告

3、用二极管正向虚拟IV仪测出数据,并记录数据于虚表3和虚表4。1、按照指导书multisim仿真软件上画出三种模型电路图,1、按照指导书multisim仿真软件上画出三种模型电路图,1、按照指导书multisim仿真软件上画出三种模型电路图,表6 二极管三种模型参数测试表(电源电压=1.2V)2、用万用表测出数据,并记录数据于虚表1和虚表2。2、用万用表测出数据,并记录数据于虚表5和虚表6。表5 二极管三种模型参数测试表(电源电压=12V)二极管三种模型参数测试表(电源电压=12V)

Welcome To My6n Blog 4079

CPD (Coherent Point Drift) 算法实现点云配准 C++版

作为和icp并列的点集配准算法cpd为什么没有icp火,等我把整个方案跑完才明白。 首先下载cpd https://github.com/gadomski/cpd 包含的fgt https://github.com/gadomski/fgt 下载到win10的解压后 运行cmake来进行编译 这个时候会提醒缺少eigen3 fgt python 这几个都安装排除后 在build文件夹下会生成vs2017的源码,右键全部生成后在 .\cpd-master\build\Debug 下会生成一个cpd.li

uranus1992的博客 3510

【深度学习】经典算法解读及代码复现AlexNet-VGG-GoogLeNet-ResNet(一)

ImageNet数据集是ILSVRC竞赛使用的是数据集,由斯坦福大学李飞飞教授主导,包含了超过1400万张全尺寸的有标记图片,大约有22000个类别的数据。ILSVRC全称ImageNet Large-Scale Visual Recognition Challenge,是视觉领域最受追捧也是最具权威的学术竞赛之一,代表了图像领域的最高水平。从2010年开始举办到2017年最后一届,使用ImageNet数据集的一个子集,总共有1000类。而从2012年起,该项赛事的比赛获胜者都是使用深度学习算法,如下图。当

qq_43018832的博客 1415

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 812

pytorch入门 - AlexNet神经网络

​​架构创新​​:首次证明了深层卷积神经网络在大规模图像识别任务中的有效性​​技术突破​​:引入了ReLU激活函数、Dropout、局部响应归一化等技术​​硬件加速​​:开创性地使用GPU加速CNN训练,大幅缩短训练时间​​开源影响​​:AlexNet的成功推动了深度学习开源框架的发展尽管现在有更先进的CNN架构,AlexNet仍然是学习深度学习计算机视觉的经典案例。通过本文的代码实现,我们可以在FashionMNIST数据集上复现AlexNet的基本架构,并理解其工作原理。

weixin_36933008的博客 16

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习——深卷积网络:实例探究[11]

目录 三个经典网络 残差网络 1x1卷积 google inception网络 迁移学习 数据增强 如何使用开源代码 一、三个经典网络 LeNet [LeCun et al., 1998. Gradient-based learning applied to document recognition] 这篇文章较早,比如现在常用max,而当时用avg,当时也没...

weixin_30267691的博客 160

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

李哥的深度学习项目班1

深度学习基本知识

Fallen_night的博客 754

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 学习LeNet(网络讲解+代码)
下一篇: 非root用户下安装supervisor并使用supervisor和gunicorn部署项目
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值