AlexNet论文代码阅读

论文标题: ImageNet Classification with Deep Convolutional Neural Networks
论文链接: https://volctracer.com/w/BX18q92F
代码链接: https://github.com/dansuh17/alexnet-pytorch

内容概述

训练了一个大型的深度卷积神经网络,将ImageNet LSVRC-2010竞赛中的120万张高分辨率图像分类到1000个不同的类别中。在测试数据上取得了37.5%的top-1错误率(top-1错误率是指其正确标签不是模型认为最可能的标签的比例)和17.0%的top-5错误率(其正确标签不是模型认为最可能的五个标签中的比例)。该神经网络包含6000万个参数和65万个神经元,由五个卷积层(其中一些后面跟着最大池化层)和三个全连接层组成,最后是一个1000路softmax。为了加快训练速度,使用了非饱和神经元和卷积运算的高效GPU实现。
网络结构图

一、架构

1.1多GPU训练

上图的网络架构图,分布在两个GPU中,只有第3层的卷积核是从第2层的所有卷积核映射中获取输入的,其他卷积核都只从同一GPU的卷积核映射中获取输入。两个GPU学习到的卷积核表现出不同的学习效果,这是受限连接性的结果。GPU1上的核在很大程度上与颜色无关,而GPU2上的核在很大程度上与颜色相关。
在这里插入图片描述

1.2使用ReLu

使用非饱和非线性激活函数(ReLU)替换了饱和非线性激活函数(tanh)加快训练。下图可以看出使用ReLu比tanh快几倍。
在这里插入图片描述

1.3局部响应归一化

局部归一化有助于该网络泛化。
局部响应归一化层加在了第一层和第二层卷积层后,最大池化层前。
b x , y i = a x , y i / ( k + α ∑ j = m a x ( 0 , i − n / 2 ) m i n ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β b_{x,y}^i=a_{x,y}^i/(k+α\sum_{j=max(0,i-n/2)}^{min(N-1,i+n/2)}(a_{x,y}^j)^2)^β bx,yi=ax,yi/(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)β
a x , y i a_{x,y}^i ax,yi表示在位置(x,y)应用核i后再应用ReLU非线性函数计算出的神经元活动。 b x , y i b_{x,y}^i bx,yi表示响应归一化活动。求和遍历再相同空间位置的n个相邻内核映射,N是该层中内核的总数。k,n,α,β是超参数,k=2,n=5,α=0.0001,β=0.75。

1.4 重叠池化

令kernel-size>stride达到重叠池化。

二、减少过拟合

2.1 数据增强

Ⅰ图像平移和水平翻转
通过从256 * 256图像中提取随机的224 * 224补丁,使训练集大小增加了2048倍—— ( 256 − 224 ) 2 ∗ 2 (256-224)^2 *2 (256224)22,测试时提取5个224 * 224的补丁(四个角补丁和中心补丁)及其水平反射(共十个补丁)来进行预测,并在网络的softmax层对十个补丁的预测进行平均。
Ⅱ 改变训练图像中的RGB通道的强度
在整个ImageNet训练集的RGB像素值集合上执行PCA。对于每个训练图像,找到其协方差矩阵的特征向量与特征值,计算 Δ I = [ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] T \Delta I = [p_1,p_2,p_3][α_1λ_1,α_2λ_2,α_3λ_3]^T ΔI=[p1,p2,p3][α1λ1,α2λ2,α3λ3]T
其中 p i , λ i p_i,λ_i pi,λi是RGB像素值3x3协方差矩阵的第i个特征向量和特征值, α i α_i αi是从均值为零,标准差为0.1的高斯分布中抽取的随机变量。在每个RGB图像像素 I x y = [ I x y R , I x y G , I x y B ] I_{xy}=[I_{xy}^R,I_{xy}^G,I_{xy}^B] Ixy=[IxyR,IxyG,IxyB]中添加 Δ I \Delta I ΔI
该方案近似地捕捉了自然图像的一个重要属性,即物体身份对光照强度和颜色的变化是不变的。

2.2 dropout丢弃法

在前两个全连接隐藏层中使用了dropout,以0.5的概率将每个隐藏神经元的输出设置为零。在测试中,使用全部神经元,但将其输出乘以0.5。dropout会减少神经元对其他特定神经元的依赖。

三、网络的细节,

使用了momentum,动量为0.9,权重衰减为0.0005,批次大小为128。
学习率为0.01,学习率在训练过程中,随学习轮次变小。每次除以10,进行了大约90次循环。

四、结果

在这里插入图片描述
在ILSVRC-2012竞赛中表现如下:
在这里插入图片描述
在这里插入图片描述

五、定性评估

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

核心代码

self.net = nn.Sequential(nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4),  # (b x 96 x 55 x 55)nn.ReLU(),nn.LocalResponseNorm(size=5, alpha=0.0001, beta=0.75, k=2),  # section 3.3nn.MaxPool2d(kernel_size=3, stride=2),  # (b x 96 x 27 x 27)nn.Conv2d(96, 256, 5, padding=2),  # (b x 256 x 27 x 27)nn.ReLU(),nn.LocalResponseNorm(size=5, alpha=0.0001, beta=0.75, k=2),nn.MaxPool2d(kernel_size=3, stride=2),  # (b x 256 x 13 x 13)nn.Conv2d(256, 384, 3, padding=1),  # (b x 384 x 13 x 13)nn.ReLU(),nn.Conv2d(384, 384, 3, padding=1),  # (b x 384 x 13 x 13)nn.ReLU(),nn.Conv2d(384, 256, 3, padding=1),  # (b x 256 x 13 x 13)nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),  # (b x 256 x 6 x 6))# classifier is just a name for linear layersself.classifier = nn.Sequential(nn.Dropout(p=0.5, inplace=True),nn.Linear(in_features=(256 * 6 * 6), out_features=4096),nn.ReLU(),nn.Dropout(p=0.5, inplace=True),nn.Linear(in_features=4096, out_features=4096),nn.ReLU(),nn.Linear(in_features=4096, out_features=num_classes),)self.init_bias()  # initialize biasdef init_bias(self):for layer in self.net:if isinstance(layer, nn.Conv2d):nn.init.normal_(layer.weight, mean=0, std=0.01)nn.init.constant_(layer.bias, 0)# original paper = 1 for Conv2d layers 2nd, 4th, and 5th conv layersnn.init.constant_(self.net[4].bias, 1)nn.init.constant_(self.net[10].bias, 1)nn.init.constant_(self.net[12].bias, 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩散模型(三)

相关阅读: 扩散模型(一) 扩散模型(二) Latent Variable Space 潜在扩散模型(LDM;龙巴赫、布拉特曼等人,2022 年)在潜在空间而非像素空间中运行扩散过程,这…

git基础使用--4---git分支和使用

文章目录 git基础使用--4---git分支和使用1. 按顺序看2. 什么是分支3. 分支的基本操作4. 分支的基本操作4.1 查看分支4.2 创建分支4.3 切换分支4.4 合并冲突 git基础使用–4—git分支和使用 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念…

8.攻防世界Web_php_wrong_nginx_config

进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中,尝试无果,查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令: dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…

【漫话机器学习系列】076.合页损失函数(Hinge Loss)

Hinge Loss损失函数 Hinge Loss(合页损失),也叫做合页损失函数,广泛用于支持向量机(SVM)等分类模型的训练过程中。它主要用于二分类问题,尤其是支持向量机中的优化目标函数。 定义与公式 对于…

python算法和数据结构刷题[5]:动态规划

动态规划(Dynamic Programming, DP)是一种算法思想,用于解决具有最优子结构的问题。它通过将大问题分解为小问题,并找到这些小问题的最优解,从而得到整个问题的最优解。动态规划与分治法相似,但区别在于动态…

本地Deepseek添加个人知识库(Page Assist/AnythingLLM)

本地Deepseek两种方法建立知识库 前言 (及个人测试结论)法一、在Page Assist建立知识库step1 下载nomic-embed-textstep2 加载进Page Assiststep3 添加知识step4 对话框添加知识库 法二、在AnythingLLM建立知识库准备工作1.下载nomic-embed-text2.下载An…

记8(高级API实现手写数字识别

目录 1、Keras:2、Sequential模型:2.1、建立Sequential模型:modeltf.keras.Sequential()2.2、添加层:model.add(tf.keras.layers.层)2.3、查看摘要:model.summary()2.4、配置训练方法:model.compile(loss,o…

grpc 和 http 的区别---二进制vsJSON编码

gRPC 和 HTTP 是两种广泛使用的通信协议,各自适用于不同的场景。以下是它们的详细对比与优势分析: 一、核心特性对比 特性gRPCHTTP协议基础基于 HTTP/2基于 HTTP/1.1 或 HTTP/2数据格式默认使用 Protobuf(二进制)通常使用 JSON/…

文字投影效果

大家好,我是喝西瓜汁的兔叽,今天给大家分享一个常见的文字投影效果。 效果展示 我们来实现一个这样的文字效果。 思路分析 这样的效果如何实现的呢? 实际上是两组相同的文字,叠合在一块,只不过对应的css不同罢了。 首先&…

图像处理之图像灰度化

目录 1 图像灰度化简介 2 图像灰度化处理方法 2.1 均值灰度化 2.2 经典灰度化 2.3 Photoshop灰度化 2.4 C语言代码实现 3 演示Demo 3.1 开发环境 3.2 功能介绍 3.3 下载地址 参考 1 图像灰度化简介 对于24位的RGB图像而言,每个像素用3字节表示&#xff0…

【课题推荐】基于t分布的非高斯滤波框架在水下自主导航中的应用研究

水下自主导航系统在海洋探测、环境监测及水下作业等领域具有广泛的应用。然而,复杂的水下环境常常导致传感器输出出现野值噪声,这些噪声会严重影响导航信息融合算法的精度,甚至导致系统发散。传统的卡尔曼滤波算法基于高斯噪声假设&#xff0…

知识库管理系统为企业赋能与数字化转型的关键解决方案分析

内容概要 在当今快速发展的商业环境中,知识库管理系统成为企业进行数字化转型的重要支撑工具。这类系统不仅可以帮助企业高效整合和管理其知识资产,还能提升信息共享与沟通的效率。通过科学的知识管理策略,企业可以在动态市场中实现精益管理…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导,有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

vue入门到实战 二

目录 2.1 计算属性computed 2.1.1什么是计算属性 2.1.2 只有getter方法的计算属性 2.1.3 定义有getter和setter方法的计算属性 2.1.4 计算属性和methods的对比 2.2 监听器属性watch 2.2.1 watch属性的用法 2.2.2 computed属性和watch属性的对比 2.1 计算属性computed…

Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Baklib赋能企业实现高效数字化内容管理提升竞争力

内容概要 在数字经济的浪潮下,企业面临着前所未有的机遇与挑战。随着信息技术的迅猛发展,各行业都在加速推进数字化转型,以保持竞争力。在这个过程中,数字化内容管理成为不可或缺的一环。高效的内容管理不仅能够优化内部流程&…

六十分之三十七——一转眼、时光飞逝

一、目标 明确可落地,对于自身执行完成需要一定的努力才可以完成的 1.第三版分组、激励、立体化权限、智能设备、AIPPT做课 2.8本书 3.得到:头条、吴军来信2、卓克科技参考3 4.总结思考 二、计划 科学规律的,要结合番茄工作法、快速阅读、…

实验十 Servlet(一)

实验十 Servlet(一) 【实验目的】 1.了解Servlet运行原理 2.掌握Servlet实现方式 【实验内容】 1、参考课堂例子,客户端通过login.jsp发出登录请求,请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功&#xff0c…

基于springboot+vue的哈利波特书影音互动科普网站

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

【python】四帧差法实现运动目标检测

四帧差法是一种运动目标检测技术,它通过比较连续四帧图像之间的差异来检测运动物体。这种方法可以在一定的程度上提高检测的准确性。 目录 1 方案 2 实践 ① 代码 ② 效果图 1 方案 具体的步骤如下: ① 读取视频流:使用cv2.VideoCapture…