当前位置: 首页 > news >正文

【深度学习】四大图像分类网络之AlexNet

        AlexNet是由Alex Krizhevsky、Ilya Sutskever(均为Hinton的学生)和Geoffrey Hinton(被誉为”人工智能教父“,首先将反向传播用于多层神经网络)在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络。AlexNet在 ImageNet 大规模视觉识别竞赛中取得了优异的成绩,把深度学习模型在比赛中的正确率提升到一个前所未有的高度,它的出现对深度学习发展具有里程碑式的意义。论文在写作过程中并没有提及将本网络架构称为AlexNet,而是后来人们将一作作者的名字融入,称为AlexNet。

论文原文:ImageNet Classification with Deep Convolutional Neural Networks

         本文将首先介绍 AlexNet 的基本结构,然后讲述AlexNet的创新点,最后给出了基于pytorch的AlexNet代码实现。

一、AlexNet基本结构

        AlexNet输入为RGB三通道的224 × 224 × 3大小的图像,共包含5 个卷积层和 3 个全连接层。其中,每个卷积层都包含卷积核、偏置项、ReLU激活函数。而第1、2、5个卷积层后面都跟着一个最大池化层(Max Pooling Layer),第1、2个卷积层后跟着局部响应归一化(LRN)模块,后面三个层为全连接层,最终输出层为softmax,将网络输出转化为概率值,用于预测图像的类别。

        下图是AlexNet的网络结构图,从中可以看到网络结构在部署的时候采用的是双GPU方式,但是随着并行计算等算法的出现,这种方式也变得麻烦且不高效,一般不会采用。

各层网络参数设置

输入尺寸卷积/池化核尺寸步长stride填充padding输出尺寸
卷积层C1(ReLU)224 × 224 × 311×11×3(96个)4055×55×48(一对)
最大池化层55×55×48(一对)3×32027×27×48(一对)
LRN
卷积层C2(ReLU)27×27×48(一对)5× 5×48(256个)1227×27×128(一对)
最大池化层27×27×128(一对)3×32013×13×128(一对)
LRN
卷积层C3(ReLU)13×13×128(一对)3×3×256(384个)1113×13×192(一对)
卷积层C4(ReLU)13×13×192(一对)3×3x192(384个)1113×13×192(一对)
卷积层C5(ReLU)13×13×192(一对)3×3 ×192(256个)1113×13×128(一对)
最大池化层13×13×128(一对)3×3206×6×128(一对)
全连接层FC6(ReLU)6×6×128(一对)6×6×256(4096个)101×1×4096

全连接层FC7

(ReLU)

1×1×4096///1×1×4096
全连接层FC8(softmax)1×1×4096///1×1×1000

二、 创新点

1、更深的神经网络结构

        AlexNet 是首个真正意义上的深度卷积神经网络,它的深度达到了当时先前神经网络的数倍。通过增加网络深度,AlexNet 能够更好地学习数据集的特征,从而提高了图像分类的精度。

2. 使用ReLU作为激活函数

        ReLU(Rectified Linear Unit)是一种非线性激活函数,尽管它的表达式看起来简单:f(x)=max(0,x) ,可能会认为正值部分是线性的,因此 ReLU 整体上也是线性的。然而,它实际上是非线性的,这是因为它改变了输入输出之间的关系。首先是,分段定义导致非线性。ReLU 的定义分为两部分:

虽然 y=x 是线性的,但当 y=0 和 y=x 拼接在一起时,整个函数变得非线性,因为它在 x=0 的位置发生了“转折”(即斜率不再连续)。其次是,破坏线性叠加性。如果一个神经网络中所有的操作(权重乘积、加法)都是线性的,那么无论堆叠多少层,最终的输出仍然是输入的线性变换。这会导致网络无法拟合复杂的非线性数据。ReLU 通过其分段特性(在某些输入上输出为 0)破坏了线性叠加性:

这使得网络能够通过组合多个 ReLU 激活函数来表示复杂的非线性函数。最后是,梯度的非线性行为。ReLU 的导数(梯度)如下:

这种分段的梯度行为在反向传播时也是非线性的,在某些区域梯度为 0,这意味着这些区域的权重不会被更新;在其他区域梯度为 1,权重会正常更新。这种选择性更新(由梯度的非线性决定)进一步增强了网络的非线性建模能力。

        知道了为什么ReLU函数也是一种非线性激活函数之后,我们看一下ReLU函数的优点。相比于传统的sigmoid和 tanh 函数,ReLU 能够在保持计算速度的同时,有效地解决了梯度消失问题,从而使得训练更加高效。观察sigmoid和 tanh 函数,我们可以看到,当x变得很大或很小时,梯度几乎为0,也就出现了梯度消失的现象,当梯度消失发生时,最后一个隐层梯度更新基本正常,但是越往前的隐层内更新越慢,甚至有可能会出现停滞,此时,多层深度神经网络可能会退化为浅层的神经网络(只有后面几层在学习),因为浅层基本没有学习,对输入仅仅做了一个映射而已,从而导致了浅层网络的参数发生了变化微弱。

3. 局部响应归一化(LRN)的使用

        LRN是在卷积层和池化层之间添加的一种归一化操作。在卷积层中,每个卷积核都对应一个特征图,LRN就是对这些特征图进行归一化。对于每个特征图上的每个位置,计算该位置周围的像素的平方和,然后将当前位置的像素值除以这个和。计算过程可以用以下公式表示:

        LRN本质是抑制邻近神经元的响应(侧抑制),从而增强了神经元的较大响应。这种技术在一定程度上能够避免过拟合,并提高网络的泛化能力。现在通常不会被使用,有更多其他的归一化方式。

4、数据增强和Dropout(训练技巧)

为了防止过拟合,AlexNet 引入了数据增强和 Dropout 技术。数据增强可以通过对图像进行旋转、翻转、裁剪等变换,增加训练数据的多样性,提高模型的泛化能力。Dropout 则是在训练过程中随机删除一定比例的神经元,强制网络学习多个互不相同的子网络,从而提高网络的泛化能力。Dropout简单来说就是在前向传播的时候,让某个神经元的激活值以一定的概率p丢失,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。

三、 代码

网络构建代码如下:(model.py)

import torch.nn as nn
import torch.utils.model_zoo as model_zoo__all__ = ['AlexNet', 'alexnet']model_urls = {'alexnet': 'https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth',
}class AlexNet(nn.Module):def __init__(self, num_classes=1000):super(AlexNet, self).__init__()self.features = nn.Sequential(nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2),nn.Conv2d(64, 192, kernel_size=5, padding=2),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2),nn.Conv2d(192, 384, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.Conv2d(384, 256, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.Conv2d(256, 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(x.size(0), 256 * 6 * 6) #进行展平x = self.classifier(x)return xdef alexnet(pretrained=False, model_root=None, **kwargs):model = AlexNet(**kwargs)if pretrained:model.load_state_dict(model_zoo.load_url(model_urls['alexnet'], model_root))return model

参考资料:

卷积神经网络经典回顾之AlexNet - 知乎https://zhuanlan.zhihu.com/p/61854575724 深度卷积神经网络 AlexNet【动手学深度学习v2】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1h54y1L7oe/?spm_id_from=333.337.search-card.all.click&vd_source=0dc0c2075537732f2b9a894b24578eedCV-baselinel-AlexNet-06-训练技巧_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV167411371Y/?spm_id_from=333.788.player.switch&vd_source=0dc0c2075537732f2b9a894b24578eed&p=6

相关文章:

【深度学习】四大图像分类网络之AlexNet

AlexNet是由Alex Krizhevsky、Ilya Sutskever(均为Hinton的学生)和Geoffrey Hinton(被誉为”人工智能教父“,首先将反向传播用于多层神经网络)在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络。AlexNet在…...

Day1——GitHub项目共同开发

MarkDowm解释 Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML代码。Markdown的目的是让文档的编写和阅读变得更加容易,同时也不失HTML的强大功能。以下是Markdown的一些基本概念和用法&a…...

基于PHP的香水销售系统的设计与实现

摘 要 时代科技高速发展的背后,也带动了经济的增加,人们对生活质量的要求也不断提高。香水作为一款在人际交往过程中,给对方留下良好地第一印象的产品,在生活中也可以独自享受其为生活带来的点缀。目前香水市场体量庞大&#xff…...

A-star算法

算法简介 A*(A-star)算法是一种用于图形搜索和路径规划的启发式搜索算法,它结合了最佳优先搜索(Best-First Search)和Dijkstra算法的思想,能够有效地寻找从起点到目标点的最短路径。A*算法广泛应用于导航、…...

前端用原生js下载File对象文件,多用于上传附件时,提交之前进行点击预览,或打开本地已经选择待上传的附件列表

用于如上图场景,已经点击选择了将要上传的文件,在附件列表里面用户希望点击下载文件,以核实自己是否选中了需要上传的文件,此刻就需要 用到下面的方法: // 下载File对象文件 downloadByFileObject(file, { fileName }…...

服务器记录所有用户docker操作,监控删除容器/镜像的人

文章目录 使用场景安装auditd添加docker审计规则设置监控日志大小与定期清除查询 Docker 操作日志查看所有用户,所有操作日志查看特定用户的 Docker 操作查看所有用户删除容器/镜像日志过滤特定时间范围内日志 使用场景 多人使用的服务器,使用的docker …...

关于使用天地图、leaflet、ENVI、Vue工具实现 前端地图上覆盖上处理的农业地块图层任务

1.项目框架搭建 项目地址:Webgis: 一个关于webgis、天地图、Leaflet、Vue、数据库的学习框架。 ①git到本地,vscode打开。 ② 配置后端 搜索下载MySQL插件(前提:电脑中装有MySQL才可应用)。 连接数据库。 配置基本…...

基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代社会…...

用 React 编写一个笔记应用程序

这篇文章会教大家用 React 编写一个笔记应用程序。用户可以创建、编辑、和切换 Markdown 笔记。 1. nanoid nanoid 是一个轻量级和安全的唯一字符串ID生成器,常用于JavaScript环境中生成随机、唯一的字符串ID,如数据库主键、会话ID、文件名等场景。 …...

如何离线安装dockerio

如何离线安装dockerio 一、下载Docker离线安装包二、上传离线安装包三、解压安装包四、复制文件到系统目录五、配置Docker服务六、设置文件权限并重新加载配置七、启动Docker服务八、设置开机自启动九、验证安装Docker是一个开源的容器化平台,用于开发、发布和运行应用程序。离…...

LocalDateTime序列化(跟redis有关)

使用过 没成功,序列化后是[2024 11 10 17 22 20]差不多是这样, 反序列化后就是: [ 2024 11 10.... ] 可能是我漏了什么 这是序列化后的: 反序列化后: 方法(加序列化和反序列化注解)&…...

【redis】如何跑

在 Windows 上配置 Redis 需要一些额外的步骤,因为 Redis 官方并没有为 Windows 提供原生支持。不过,可以通过以下方法来安装和配置 Redis。 方法一:使用 Windows 版 Redis(非官方版本) 下载 Redis for Windows Redis…...

Scala学习记录,全文单词统计

package test32 import java.io.PrintWriter import scala.io.Source //知识点 // 字符串.split("分隔符":把字符串用指定的分隔符,拆分成多个部分,保存在数组中) object test {def main(args: Array[String]): Unit {//从文件1.t…...

【MyBatis】验证多级缓存及 Cache Aside 模式的应用

文章目录 前言1. 多级缓存的概念1.1 CPU 多级缓存1.2 MyBatis 多级缓存 2. MyBatis 本地缓存3. MyBatis 全局缓存3.1 MyBatis 全局缓存过期算法3.2 CacheAside 模式 后记MyBatis 提供了缓存切口, 采用 Redis 会引入什么问题?万一遇到需强一致场景&#x…...

学习ASP.NET Core的身份认证(基于Session的身份认证3)

开源博客项目Blog中提供了另一种访问控制方式,其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式,测试程序中直接复用开源博客项目Blog中的相关类及接口定义,并在其上调整判断逻辑。   首先是接口A…...

速盾:高防 CDN 可以配置客户端请求超时配置?

在高防 CDN(Content Delivery Network,内容分发网络)的运行管理中,客户端请求超时配置是一项重要的功能设定,它对于优化网络资源分配、保障服务质量以及维护系统稳定性有着关键意义。 一、客户端请求超时配置的概念 …...

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示:ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…...

使用PyQt5开发一个GUI程序的实例演示

一、安装Python 下载安装到这个目录 G:\Python38-32 安装完成有这些工具,后面备用: G:\Python38-32\Scripts\pyrcc5.exe G:\Python38-32\Scripts\pyuic5.exe 二、PyQt环境配置 pip install PyQt5 pip install pyqt5-tools 建议使用国内源&#xff0c…...

【VUE3】【Naive UI】<NCard> 标签

【Vue3】【Naive UI】 标签 title 属性bordered 属性header-style 和 body-style 属性footer 属性actions 属性hoverable 属性loading 属性size 属性type 属性cover 和 avatar 属性description 属性style 属性 【VUE3】【Naive UI】<NCard> 标签 【VUE3】…...

选择排序之大根堆

大根堆:树的根节点大于左右子树的结点值,这样就能保证每次从树根取的是最大值 灵魂在于HeadAdjust函数,以某节点为树根通过下落调整为大根堆, 建树思想 就是,从最后一个非终端结点开始调整以该结点为根的子树&#x…...

AI的魔力:如何为开源软件注入智慧,开启无限可能

“AI的魔力:如何为开源软件注入智慧,开启无限可能” 引言: 在科技发展的浪潮中,开源软件生态一直扮演着推动创新与共享的重要角色。从Linux到Python,开源项目赋予了开发者全球协作的机会,推动了技术的飞速…...

如何在 VPS 上使用 Git 设置自动部署

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 要了解 Git 的基本知识以及如何安装,请参考介绍教程。 本文将教你如何在部署应用程序时使用 Git。虽然有许多使用 Gi…...

Linux下的三种 IO 复用

目录 一、Select 1、函数 API 2、使用限制 3、使用 Demo 二、Poll 三、epoll 0、 实现原理 1、函数 API 2、简单代码模板 3、LT/ET 使用过程 (1)LT 水平触发 (2)ET边沿触发 4、使用 Demo 四、参考链接 一、Select 在…...

通过 SSH 进行WordPress网站的高级服务器管理

我在管理hostease的服务器时,时常需要通过SSH登录服务器进行修改。而在网站管理中,SSH不仅是一个基础工具,更是高级用户用来精细化管理和优化服务器的重要工具。通过SSH,你可以深入监控服务器的性能、精细管理系统资源&#xff0c…...

速盾高防cdn支持移动端独立缓存

随着移动互联网的快速发展,移动端网页访问量也越来越大。然而,移动端的网络环境相对不稳定,用户体验可能会受到影响。因此,使用高防CDN来加速移动端网页访问,成为越来越多网站运营者的首选。 速盾高防CDN是一种分布式…...

PMP–一、二、三模、冲刺–分类–8.质量管理

文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准,到底有没有满足质量需求,看质量标准即可。6、 [单选] 自项目开始以来,作为项目经理同事的职能经理一直公开反对该项目,在讨论项目里…...

如何快速使用Unity 的UPR---1资源检测保姆级

关于我们的性能检测工具已经有很多了,比如UWA的或者是我们的Unity 的UPR 都是很好的,今天说一下UPR吧 官方网址 :UPR - Unity专业性能优化工具 这个是官方给的Demo 选择你的平台就可以 这个可以作为一个参考但是不是很建议用官方的因为我们…...

pytorch中的.clone() 和 .detach()

在PyTorch中,.clone() 和 .detach() 是两个用于处理张量(Tensor)的方法,它们各自有不同的用途: .clone(): .clone() 方法用于创建一个张量的副本(深拷贝)。这意味着原始张量和新张量…...

三十二:网络爬虫的工作原理与应对方式

随着互联网的快速发展,网络爬虫(Web Crawlers)作为一种自动化工具,被广泛应用于搜索引擎、数据采集、网站监控等领域。网络爬虫的作用是通过自动化程序,模拟人类浏览网页的行为,自动下载和解析网页内容&…...

nodejs相关知识介绍

1、nodejs官方文档: https://nodejs.org/zh-cn nodejs可以用nvm进入安装; 2、npm说明: npm官方教程:https://npm.p2hp.com/ npm是 Node.js 的标准包管理器,也就是说nodejs安装好,npm也就安装好了&#…...

郑州做网站建设的公司/深圳网站开发技术

(以下几种情况是我在使用时所遇情况以及最终顺利解决的方法,主要针对8.0以上版本的mysql哦) 问题一:无法启动mysql(在终端输入net start mysql,出现无法启动的情况) 解决:可能是因为…...

wordpress cui/焦作seo公司

如果你不小心, 你会发现自己用 printk 产生了上千条消息, 压倒了控制台并且, 可能地, 使系统日志文件溢出. 当使用一个慢速控制台设备(例如, 一个串口), 过量的消息速率也 能拖慢系统或者只是使它不反应了. 非常难于着手于系统出错的地方, 当控制台不停地输 出数据. 因此, 你应…...

重庆网站建设023kw/简述网站推广的方式

为什么80%的码农都做不了架构师?>>> Intellij Idea版本为Ultimate 2016.1, gradle版本为3.5,启动springboot报错 java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplicationat com.some.fancy.name.Application.main(Application.ja…...

网站建设毕业设计心得/google浏览器入口

VLAN之间在二层是分隔开的,如果要实现VLAN之间的通信,必须要借助到三层路由功能。 支持VLAN间路由的设备:  1.任意的3层交换机  2.支持以太口起子接口的路由器   <单臂路由(Router on a Stick)&#xf…...

大连淘宝网站建设/百度识图入口

2019独角兽企业重金招聘Python工程师标准>>> 处理图形中的乱码 设置为中文后,zabbix图形的中文文字会显示小方框这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来vim /usr/share/zabbix/include/defines.inc.php //搜索Z…...

乐wordpress/济南今日头条新闻

注意事项: centos6.5系统下,修改etc/sysconfig/network-script下的ifcg-eth0文件 centos7系统及以上,修改etc/sysconfig/network-script下的ifcg-16777736文件 配置步骤: 一、打开目录Terminal终端,进入目录etc/syscon…...