【视频讲解】ResNet深度学习神经网络原理及其在图像分类中的应用|附Python代码

全文链接:https://tecdat.cn/?p=37134

原文出处:拓端数据部落公众号

分析师:Canglin Li

本文深入探讨了卷积层(Convolutional Layer)在深度学习框架中的核心作用与操作机制,并分析了其在特征提取、网络构建以及性能提升方面的独特优势。此外,本文还介绍了与卷积层紧密相关的激活函数、池化层以及ResNet深度神经网络的概念与应用,并通过实验验证了ResNet在复杂数据集上的高效分类性能。本文将通过视频讲解,展示ResNet原理,并结合如何用 Python中VGG模型、自定义ResNet模型、Capsule Network模型分析MNIST数据集实例的代码数据,为读者提供一套完整的实践数据分析流程。

1. 引言

在深度学习中,卷积层作为构建卷积神经网络(CNN)的基本单元,承担着从输入数据中提取并表征关键特征的重要任务。通过窗口滑动与滤波器计算两个关键操作,卷积层能够逐层递进地提取从低级到高级的特征表示,为后续的网络层提供丰富的信息基础。

2. 卷积层的基本原理

卷积层的核心在于卷积运算,该运算通过自定义大小的卷积核(滤波器)在输入数据上滑动,实现局部数据的加权求和。这一过程不仅模拟了生物视觉系统的处理机制,还使得网络能够捕捉到输入数据的空间结构特征。值得注意的是,随着网络层数的增加,卷积层能够迭代地提取出更为复杂、高级的特征表示,从而增强了网络的表征能力。

3. 激活函数与池化层

为了引入非线性因素并提升网络的泛化能力,卷积层后通常会接入激活函数。常用的激活函数包括ReLU、tanh和sigmoid等,它们各自具有不同的特性与适用范围。

此外,为了降低特征维度并保留关键信息,池化层(Pooling Layer)被广泛应用于卷积层之后。池化层通过将特征图划分为多个区域并取最大值或平均值来实现降维处理,从而减小了计算量并增强了特征的鲁棒性。

4. ResNet深度神经网络

ResNet(残差网络)作为一种创新的深度神经网络架构,在ImageNet等大规模图像识别竞赛中取得了显著的成绩。ResNet通过引入“shortcut connection”(残差连接)机制解决了深度神经网络训练中的梯度消失和梯度爆炸问题,使得网络能够训练得更深且更稳定。本文详细分析了ResNet的网络结构特点及其在不同层数版本中的具体实现方式,并强调了残差连接在保留原始特征和加速网络收敛方面的重要作用。

ResNet的网络结构图

伴随着深度神经网络的不断发展,ResNet同样延伸出了不同的版本,这里的版本指的是层数的不同,各种版本的具体结构下如图所示。

由图可知,各种ResNet的网络结构相差不大,不论是18层、34层、50层、101层还是152层。在网络的开始都是一个77的卷积层,然后是一个33的最大池化下采样,然后按照途图中的conv2_x、conv3_x、 conv4_x、conv5_x中的残差结构。最后再跟一个平均池化下采样和全连接层,sofmax作为输出。

COV2_x

这里需要注意,conv3_x,是3x3,128通道,也就是说经过conv2_x后得到的56x56,64通道,到conv3_x里面升维了,并且大小也变了,变成28x28了,这时候要注意一个问题,分支与主分支的结果就无法相加了,大小不一致,维度不一致,这是需要使用一个分支(如右图所示)。

5. Batch Normalization

批量归一化(Batch Normalization)作为深度学习领域的一项重要技术,通过对每一层网络的输入进行归一化处理来加速训练过程并提高模型性能。本文介绍了Batch Normalization的基本原理及其在ResNet中的实际应用位置(即放在卷积层与激活层之间),并强调了其对于缓解特征分布散乱问题、提升训练稳定性和收敛速度的重要作用。

真正的残差结构

建议将bn层放在卷积层(Conv)和激活层(例如Relu)之间,且卷积层不要使用偏置bias,所以说,我们实际上的残差网络块应该是如右图。

ResNet的优点

具体的优点如下:
(1)可以训练非常深的神经网络,避免了梯度消失问题,提高了模型的表达能力和性能。
(2)使用残差连接可以保留原始特征,使得网络的学习更加顺畅和稳定,进一步提高了模型的精度和泛化能力.
(3)训练时可以避免梯度消失和梯度爆炸问题,加速网络收敛。

6.实例分析

本项目使用了分类难度较大的数据集notMNIST(部分数据如左图),在训练集、测试集以及验证集的选择方面,本文在所有数据中随机选择50%作为训练集,30%作为验证集,剩下的20%作为测试集。

在参数设置层面,利用sgdm作为训练算法,最大迭代次数50次,每次进行73回运算,总运算3650次,设置学习率为0.01。

实验结果

在如上叙述的条件下,ResNet18对该数据集的分类结果如图所示。
ResNet18在该数据集上的分类准确率达94.00%,分类效果较好。

Python中VGG模型、自定义ResNet模型、Capsule Network模型分析MNIST数据集

数据集归一化:计算均值与标准差

在深度学习的数据预处理阶段,归一化是一个至关重要的步骤,它有助于提升模型的收敛速度和性能。归一化通常涉及计算数据集的均值(mean)和标准差(standard deviation, std),并将原始数据转换到具有零均值和单位标准差的范围内。以下代码段展示了如何对MNIST数据集进行归一化处理,并打印出归一化所需的均值和标准差。

import numpy as np# 加载数据集
trn_data = trn_data['arr_0'] / 255  # 将像素值归一化到[0, 1]区间# 计算均值和标准差
data_mean = trn_data.mean()
data_std = trn_data.std()# 打印结果
print(f'Mean: {data_mean}')
print(f'Std: {data_std}')# 接下来,我们可以使用这些均值和标准差来归一化训练集和测试集,以便后续模型的训练与评估。

模型加载与评估

在深度学习中,模型的选择与加载是实验过程中的重要环节。以下部分展示了如何加载预训练的VGG模型、自定义ResNet模型、Capsule Network模型,以及它们的集成模型,并验证模型是否成功加载。

VGG模型

from fastai.vision.all import *# 假设databunch已正确定义并包含训练与验证数据
learn = Learner(databunch, VGG(), metrics=accuracy)
learn.load('vgg_model_with_norm')  # 加载预训练模型
print('Model was loaded')

ResNet模型

# 假设MyResNet是基于ResNet的自定义模型,BasicBlock为残差块类型
learn = Learner(databunch, MyResNet(BasicBlock, [2, 2, 2, 2]), metrics=accuracy)
learn.load('resnet_model_with_norm')  # 加载预训练模型
print('Model was loaded')

VGG与ResNet-18的集成
集成模型通过结合多个单一模型的预测结果来提高整体性能。具体实现细节取决于集成策略,但这里仅展示集成模型的加载示意。

Capsule Network模型
Capsule Network是一种较新的网络架构,旨在通过胶囊(capsules)来捕捉数据的空间层次关系。

# 假设CapsNet和caps_accuracy, caps_loss已正确定义
learn = Learner(databunch, CapsNet(), metrics=caps_accuracy, loss_func=caps_loss)
learn.load('caps_net_model_with_norm')  # 加载预训练模型
print('Model was loaded')

VGG与Capsule Network的集成
集成VGG与Capsule Network的结果表明,其性能可能不如VGG与ResNet的集成。这可能是由于不同模型架构之间的互补性差异所导致的。


learn = Learner(databunch, VGG_Caps(), metrics=vgg_caps_accuracy, loss_func=vgg_caps_loss)
vgg_capsnet_load_model(learn, 'vgg_model_with_norm', 'caps_net_model_with_norm')

关于分析师

这里感谢Canglin Li对本文做出的贡献。他是拓端的分析师,在信息与计算科学领域拥有深厚背景,熟练掌握多种编程语言和技术工具,特别是在Matlab和Java方面展现出卓越的能力。他的专业领域广泛涉及深度学习等前沿技术。

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

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

相关文章

近期代码报错解决笔记

1.TypeError: ‘bool’ object is not callable 想print("Type of head:", type(entity_emb[head])),结果报如下错误: 源代码: 因为 print 仍然被当作一个布尔值处理,而不是作为函数调用。这个问题的根源在于 print …

Adobe Photoshop(Ps)安装包软件下载

一、Adobe Photoshop简介 Adobe Photoshop(简称PS)是由Adobe Systems公司开发的图像处理软件,它是一款集图像扫描、编辑修改、图像制作、广告创意、图像输入与输出于一体的图形图像处理软件。广泛应用于专业测评、平面设计、广告摄影、影像创…

学习小型gpt源码(自用)

数据集构建_哔哩哔哩_bilibili (b站上有一系列课,从数据处理到模型构建和训练使用) 什么是batch? 为什么一个batch内的句子要一样长? 不同batch的长度可以不一样,但是同一个batch内长度一样!…

【MySQL进阶之路 | 高级篇】数据操作类型的角度理解共享锁,排他锁

1. 从数据操作的类型划分:读锁,写锁 对于数据库并发事务的读-读情况并不会引起什么问题。对于写-写,读-写操作或写-写操作这些情况可能会引起一些问题,需要使用MVCC或者加锁的方式来解决它们。在使用加锁的方式解决问题时&#x…

3.3-LSTM的改进

文章目录 1改进点1.1多层化1.2 dropout1.2.1具体概念1.2.2应该插入到LSTM模型的哪里 1.3权重共享 2改进之后的LSTMLM的代码实现2.1初始化2.2前向计算2.3反向传播 3相应的学习代码的实现4总结 1改进点 1.1多层化 加深神经网络的层数往往能够学习更复杂的模式;因此这…

利用换元法计算积分的常见题型(考研高数复习)

考研中常见的几种换元法积分计算题 (1)被积式仅包含一个根式:根号下为有 a a a 和 x x x 的平方和/平方差 此种类型的积分题型,可以通过构造单个锐角大小为 t t t 的直角三角形,利用勾股定理和三角函数进行代换。 平方和的情况 形如 ∫…

java学习----注释

简介 override介绍: 添加了这个注释其实是做了个语法校验的作用 override定义 Deprecated介绍: 源码: SuppressWarnings介绍: 源码: 元注解 Retention注解介绍: 案列 Target注解介绍: Documente…

LLM - 理解 Transformer 的位置编码 sin cos 的作用与原理

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140697827 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Transformer 模型中的位置编码是关键技术,通过为每个词嵌入向量添加位…

数据库第五次作业

1. 触发器 建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量,并测试 建立触发器,实现功能:客户取消订单,恢复商品表对应商品的数量 建立触发器,实现功能:客户修改订单,商品…

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

2024年铜川宜君半程马拉松,暴晒+爬坡152安全完赛

1、赛事背景 2024年7月21日,我参加了2024年铜川宜君半程马拉松赛,7月举办的赛事很少,全国都算温度比较高的,虽然宜君是一个山城,还是会担心气温会高。 临开赛1、2周,陕西区域降水比较多,赛前一…

【算法专题】双指针算法之LCR 179. 查找总价格为目标值的两个商品(力扣)

欢迎来到 CILMY23的博客 🏆本篇主题为:双指针算法之LCR 179. 查找总价格为目标值的两个商品(力扣) 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法…

使用nginx解决本地环境访问线上接口跨域问题

前言 前端项目开发过程中,经常会遇到各种各样的跨域问题。 虽然大部分时候,由脚手架自带的proxy功能即可解决问题,如webpack,vite等;但是若没有通过脚手架搭建项目,或者必须使用某些特殊规则转发时&#…

了解光耦合器从基础到应用

光耦合器也称为光电耦合器,是一种利用光信号传递电信号的电子元器件。它广泛应用于各种电子设备和电路中,因其在隔离电气信号、提高抗干扰能力方面的独特优势,备受工程师们的青睐。本文将为光耦爱好者和高级工程师提供一份有关光耦合器的知识…

解锁人工智能学习中的数学密钥

一、启航:奠定数学基础 1. 线性代数:AI的入门语言 学习目标:掌握向量、矩阵的基本概念及运算,理解线性空间、线性变换及特征值、特征向量的意义。学习建议:从基础教材入手,如《线性代数及其应用》&#x…

企业级视频拍摄与编辑SDK的全面解决方案

视频已成为企业传播信息、展示品牌、连接用户的重要桥梁,如何高效、专业地制作高质量视频内容,成为众多企业面临的共同挑战。美摄科技,作为视音频技术领域的创新先锋,以其强大的视频拍摄与编辑SDK,为企业量身打造了一站…

Sip for Mac:强大的屏幕取色软件

Sip for Mac是一款功能强大的屏幕取色工具软件,专为设计师、开发者和创作者打造。这款软件以其精准的取色功能和丰富的颜色管理选项而备受好评。 Sip的核心功能是提供多种取色工具,包括拾色器、取色板和屏幕取色等,使用户能够轻松地从屏幕上…

分享几种电商平台商品数据的批量自动抓取方式

在当今数字化时代,电商平台作为商品交易的重要渠道,其数据对于商家、市场分析师及数据科学家来说具有极高的价值。批量自动抓取电商平台商品数据成为提升业务效率、优化市场策略的重要手段。本文将详细介绍几种主流的电商平台商品数据批量自动抓取方式&a…

带哨兵位的双向循环链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 带哨兵位的双向循环链表 一、双向循环链表二、带哨兵位的的双向循环链表结构?2 双向循环链表接口函数的实现2.1 用于调试打印链表的接口函数2.2 双向循环链表的初…

【C++指南】类和对象(下)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注