机器学习 | 卷积神经网络

机器学习 | 卷积神经网络

实验目的

采用任意一种课程中介绍过的或者其它卷积神经网络模型(例如LeNet-5、AlexNet等)用于解决某种媒体类型的模式识别问题。

实验内容

  1. 卷积神经网络可以基于现有框架如TensorFlow、Pytorch或者Mindspore等构建,也可以自行设计实现。
  2. 数据集可以使用手写体数字图像标准数据集,也可以自行构建。预测问题可以包括分类或者回归等。实验工作还需要对激活函数的选择、dropout等技巧的使用做实验分析。必要时上网查找有关参考文献。
  3. 用不同数据量,不同超参数,比较实验效果,并给出截图和分析

实验环境

Windows11; Anaconda+python3.11; VS Code

实验过程、结果及分析(包括代码截图、运行结果截图及必要的理论支撑等

4.1 算法理论支撑

4.1.1 卷积神经网络(CNN)的基本原理

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,特别设计用于处理和分析具有网格结构的数据,如图像和视频。它能够自动学习图像中的特征并进行高效的图像分类、对象检测、图像生成和分割等任务,其模型结构主要包含以下部分:

  1. 卷积层: 卷积层负责从图像中提取特征,如边缘和纹理。它们通过应用过滤器来捕捉这些特征,逐渐形成更复杂的视觉模式。
  2. 池化层: 池化层在保留基本信息的同时减小了特征图的大小。最常见的方法是最大池化,它有助于缩小图像,同时保持关键特征并增强鲁棒性。
  3. 全连接层: 全连接层结合从前一层提取的特征进行分类和决策。他们将这些特征映射到不同的类别,识别图像中的内容。
4.1.2 AlexNet的基本结构

AlexNet网络结构相对简单,使用了8层卷积神经网络,前5层是卷积层,剩下的3层是全连接层,具体如下图2所示。

与原始的LeNet相比,AlexNet网络结构更深,同时还包括以下特点:

  1. ReLU激活函数的引入:采用修正线性单元(ReLU)的深度卷积神经网络能够大幅提高训练速度,同时能够有效防止过拟合现象的出现。
  2. 层叠池化操作:AlexNet中池化层采用了层叠池化操作,即池化大小>步长,这种类卷积操作可以使相邻像素间产生信息交互和保留必要的联系。
  3. Dropout操作:Dropout操作会将概率小于0.5的每个隐层神经元的输出设为0,即去掉一些神经节点,能够有效防止过拟合现象的出现。

4.2 实验设计

4.2.1 实验数据集及数据预处理

MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据集,包含60,000个样本的训练集以及10,000个样本的测试集。其中包括09的数字。

在本实验中,使用torchvision自带的数据集加载MNISTCIFAR-10数据集,并使用transforms.ToTensor方法加载为Tensor张量,最后通过DataLoader加载进GPU进行运算。

4.2.2 模型设计

在本次实验中,仿照AlexNet,实现了包含五个卷积层和三个全连接层构建一个深度卷积神经网络,网络的定义是重写nn.Module实现的,卷积层和全连接层之间将数据通过view拉平,同时可选择加入Dropout层防止数据过拟合。

Feature map数变化:1→32→64→128→256,卷积核kernel size均为3,同时在边缘填充单位长度的0,步幅均为1。

MaxPooling核大小为2×2,每次将特征图大小缩为原来的一半。

4.3 实验结果及分析

4.3.1 实验结果

在本次实验中,使用交叉熵损失函数和SGD优化器,激活函数采用ReLU,将模型输入通道根据数据集设为1,并设置训练超参数epoch为10,batch size为128,学习率learning rate为0.01。训练过程中损失函数loss的值和在测试集上的准确率变化如下图所示。

实验发现,随训练过程的进行,损失函数不断降低,在测试集上准确率逐渐升高,最终测试正确率最高能够达到约98.94%。损失函数和测试准确率在训练最后阶段呈现波动态,可能原因是在局部最优点附近振荡。

而后通过torch.load方法加载模型对测试集进行直观展示,模型能够对手写数字作出较为准确的分类,具有一定的泛化能力。

4.3.2 不同激活函数的比较

将所有激活函数换为Sigmoid函数,发现结果很差,损失函数强烈震荡,几乎毫无效果。分析原因可能为:

  1. 梯度消失:Sigmoid在输入极值附近的梯度接近于零,这可能导致梯度消失问题,特别是在深层网络中。这可能会影响网络的训练效率和能力。
  2. 输出偏移:Sigmoid函数的输出在0到1之间,这意味着它倾向于产生偏向于0或1的输出,这可能在梯度下降过程中导致网络权重的不稳定更新。
  3. 非稀疏性:与ReLU不同,Sigmoid的输出不稀疏,因为它在整个输入范围内都有非零输出。这可能导致网络的表示能力受到限制。

而将所有激活函数换为LeakyReLU函数,发现结果有一定提升,最高能够达到99.13%左右,且收敛速度较快,原因可能为:

传统的 ReLU 在负数输入时输出为零,这可能导致梯度在训练过程中变得非常小或者为零,称为梯度消失。Leaky ReLU 引入了一个小的负数斜率,使得梯度在负数输入时仍然存在,从而导致更均匀的梯度分布,可以减少训练过程中的梯度爆炸问题,并使权重更新更加平滑。

实验结论

卷积神经网络使用卷积操作,相较于全连接,其网络层与层之间的连接是稀疏的。其次同一层的卷积的参数是共享的,且每一层的卷积运算可以并行处理,具有较快的学习和推理速度,同时也具有较强的表示和学习能力,在图像分类领域具有较为广泛的应用。

同时,需要针对数据集和具体任务选择合理的超参数,采用合适的权重初始化方法,能够有效提高模型的性能。同时,适时的引入Dropout操作,可以通过随机断开神经元的连接,使模型更具鲁棒性,降低模型过拟合风险。

此外,CNN 还可用作其他任务的基础模型,如生成对抗网络(GAN),作为其backbone模型来辅助生成高质量的图像。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue2脚手架配置教程IDEA配置VUE

5.12.3 Vue Cli 文档地址: https://cli.vuejs.org/zh/ IDEA 打开项目,运行项目

React 原理

函数式编程 纯函数 reducer 必须是一个纯函数,即没有副作用的函数,不修改输入值,相同的输入一定会有相同的输出不可变值 state 必须是不可变值,否则在 shouldComponentUpdate 中无法拿到更新前的值,无法做性能优化操作…

Linux网络服务部署yum仓库

目录 一、网络文件 1.1.存储类型 1.2.FTP 文件传输协议 1.3.传输模式 二、内网搭建yum仓库 一、网络文件 1.1.存储类型 直连式存储:Direct-Attached Storage,简称DAS 存储区域网络:Storage Area Network,简称SAN&#xff0…

服务拆分及远程调用

分布式架构都离不开服务的拆分,微服务也是一样。 1.微服务拆分 不同微服务,不要重复开发相同业务 微服务数据独立,不要访问其它微服务的数据库 微服务可以将自己的业务暴露为接口,供其它微服务调用 2.远程调用 以前时&#xf…

Halcon提取亚像素轮廓edges_sub_pix算子

Halcon提取亚像素轮廓edges_sub_pix算子 最常用的提取亚像素轮廓的算子是edges_sub_pix算子,该算子同样提供了大量的提取方法,只需要在Filter 参数中设置方法的名字,就可以完成边缘的提取。该算子的输入是灰度图像,输出是XLD轮廓…

BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)

一、介绍 BurpSuite是渗透测试、漏洞挖掘以及Web应用程序测试的最佳工具之一,是一款用于攻击web 应用程序的集成攻击测试平台,可以进行抓包、重放、爆破,包含许多工具,能处理对应的HTTP消息、持久性、认证、代理、日志、警报。 …

使用scipy处理图片——滚动图片

大纲 常规模式constant和grid-constant 交换模式wrap和grid-wrap 镜像reflect、mirror和grid-mirror 最近值nearest 代码 在《使用numpy处理图片——滚动图片》一文中,我们介绍了numpy的roll方法,它只能让超出区域的元素回到被移动的区域中,如…

图像提取大师:轻松从指定时长中获取某帧的图片,视频剪辑方法

在数字媒体时代,视频和图像已成为生活中不可或缺的部分。要从视频中提取某一帧作为图片,或者在视频剪辑时要采用其他的方法来达到需求的效果。下面来看云炫AI智剪如何轻松地从指定时长的视频中获取某帧的图片,视频剪辑的新方法。 视频中按指定…

Spring Cloud中的提供者与消费者

在服务调用关系中,会有两个不同的角色: 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) 服务消费者:一次业务中,调用其它微服务的服务。(调用…

【竞技宝】DOTA2梦幻联赛 G2.iG让一追二击败Bright晋级败决!

北京时间2024年1月16日,DOTA2梦幻联赛S22中国区预选赛继续进行,本日首场比赛迎来G2.IG对阵Bright。本场比赛双方前两局战至1-1平,决胜局G2.iG monet的虚空在中期连续放出两个完美团战帮助G2.iG奠定胜势,最终G2.iG让一追二击败Brig…

Java 基础 - 06 List 之 Stack 以及List的相关总结

Java的栈,算是我们在Java中常见的一种数据结构,他遵循先进后出的原则(Last-In-First-Out,LIFO)的原则,在Java中,Stack是通过继承自Vector类实现的。 如上图所示,我们的stack继承自Ve…

el-table右固定最后一列显示不全或者是倒数第二列无边框线

问题图片: 解决方式1: >>>.el-table__row td:not(.is-hidden):last-child { border-left:1px solid #EBEEF5; } >>>.el-table__header th:not(.is-hidden):last-child{ border-left:1px solid #EBEEF5; } >>>.el-table__head…

苹果传拟移除Apple Watch血氧侦测功能 | 百能云芯

近日传来消息,苹果公司正考虑对部分型号的Apple Watch进行调整,可能会移除血氧侦测功能,以规避美国国际贸易委员会(ITC)在去年10月做出的禁售令决定。这一决定的背后是因为两款苹果智能手表,即Apple Watch …

Idea变量前面自动加final取消

本方式适用于点击 CtrlAltV获取方法返回值时,自动在变量前面加final 的情况。 每次都会生成final,删了自己挺麻烦,在网上搜了几个办法也不行。后来无意中看到下面这个。 通过AltShiftO调出弹出菜单 发现Declare final默认是选中,取…

【华为 ICT HCIA eNSP 习题汇总】——题目集1

1、(多选)根据下面所示的命令输出,下列描述中正确的是? A、GigabitEthernet0/0/1 允许VLAN1通过 B、GigabitEthernet0/0/1 不允许VLAN1通过 C、如果要把 GigabitEthernet0/0/1 变为 Access 端口,首先 需要使用命令“un…

云卷云舒:2024数据库发展趋势预测-长图版

云计算和大数据时代对数据库提出了更高的要求,需要支持大规模数据存储和处理。 数据库需要具备分布式和并行计算能力,以满足高性能和可扩展性的需求。新型数据库技术如NewSQL和分布式数据库成为云计算和大数据时代的趋势。 注:本文为chatGPT配…

docker下载时报错 /usr/local/bin/docker-compose: 1: cannot open html: No such file

docker 下载时报错 /usr/local/bin/docker-compose: 1: cannot open html: No such file /usr/local/bin/docker-compose: 2: Syntax error: redirection unexpected, 在网上查找了一些解决方法都不对,最后,通过删除/usr/local/bin/docker-co…

一文教你使用 ChatGPT API function calling

一文教你使用 ChatGPT API function calling Function call如何理解Function call如何调用? Function call 如何理解Function call 函式呼叫(function calling) 可说是这次ChatGPT API 更新的杀手级更新。所谓函式呼叫,就是让你把外部函式的形状写入Cha…

win下安装tensorflow

1首先ctrlaltdelete打开任务管理器查看GPU型号 2或者右键我的电脑然后如下方式查看显卡发现没有navida没有GPU

Linux--部署 Tomcat 及其负载均衡

1.案例前置知识点 1)Tomcat简介 名称由来:Tomcat最初是由 Sun的软件构架师詹姆斯邓肯戴维森开发的。后来他帮助将其变 为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目OReilly都会出一本相关的 书,并且将其封面设…