机器学习 | 卷积神经网络

news2024/11/17 19:38:27

机器学习 | 卷积神经网络

实验目的

采用任意一种课程中介绍过的或者其它卷积神经网络模型(例如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模型来辅助生成高质量的图像。

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

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

相关文章

青阳龙野网络文件传输系统Docker版

青阳龙野网络文件传输系统Docker版 基于底包debian:bookworm-slim制作 一键拉取命令如下: docker run -idt \ -p 8080:8080 \ -v /data:/kiftd-1.1.1-release/filesystem \ -v /kiftd/conf:/kiftd-1.1.1-release/conf \ -e TZAsia/Shanghai \ --privilegedtrue \…

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战(30)——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…

css 怎么绘制一个带圆角的渐变色的边框

1&#xff0c;可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 <div class"cover-wrapper"> <div class"item-cover…

Spark高级特性 (难)

Spark高级特性 (难) 闭包 /** 编写一个高阶函数&#xff0c;在这个函数要有一个变量&#xff0c;返回一个函数&#xff0c;通过这个变量完成一个计算* */Testdef test(): Unit { // val f: Int > Double closure() // val area f(5) // println(area)// 在这能否…

[易语言]易语言调用C++ DLL回调函数

易语言适合用于数据展示&#xff0c;数据的获取还是VC来的快、方便哈。 因此我一般使用VC编写DLL&#xff0c;使用易语言编写界面&#xff0c;同一个程序&#xff0c;DLL和EXE通讯最方便的就是使用接口回调了。 废话少说&#xff0c;进入主题。 1. VC编写DLL 为了DLL能够调…

精品量化公式——“风险指数”,适用于短线操作的交易系统,股票期货都适用!不漂移

不多说&#xff0c;直接上效果如图&#xff1a; ► 日线表现 代码评估 技术指标代码评估&#xff1a; 用于通过各种技术指标来分析股市走势。它使用了多个自定义变量&#xff08;VAR1, VAR2, VAR3, 等等&#xff09;&#xff0c;并且基于这些变量构建了复杂的条件和计算。以下…

PostgreSQL之SEMI-JOIN半连接

什么是Semi-Join半连接 Semi-Join半连接&#xff0c;当外表在内表中找到匹配的记录之后&#xff0c;Semi-Join会返回外表中的记录。但即使在内表中找到多条匹配的记录&#xff0c;外表也只会返回已经存在于外表中的记录。而对于子查询&#xff0c;外表的每个符合条件的元组都要…

爬虫入门学习(二)——response对象

大家好&#xff01;我是码银&#xff0c;代码的码&#xff0c;银子的银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 前言 在本篇文章&#xff0c;我们继续讨论request模块。从上一节&#xff08;爬虫学习(1)--reque…

【C++】异常机制

异常 一、传统的处理错误的方式二、C异常概念三、异常的使用1. 异常的抛出和捕获&#xff08;1&#xff09;异常的抛出和匹配原则&#xff08;2&#xff09;在函数调用链中异常栈展开匹配原则 2. 异常的重新抛出3. 异常安全4. 异常规范 四、自定义异常体系五、C 标准库的异常体…

编曲混音FL Studio21.2对电脑有什么配置要求

FL Studio 21是一款非常流行的音乐制作软件&#xff0c;它可以帮助音乐人和制作人创作出高质量的音乐作品。然而&#xff0c;为了保证软件的稳定性和流畅性&#xff0c;用户需要知道FL Studio 21对电脑的配置要求。本文将介绍FL Studio 21的配置要求&#xff0c;以帮助用户选择…

详解Java之Spring框架中事务管理的艺术

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天聊聊Spring框架中的事务管理。不管是开发小型应用还是大型企业级应用&#xff0c;事务管理都是个不可避免的话题。那么&#xff0c;为什么事务管理这么重要呢&#xff1f;假设在银行系统中转账时&#x…

Java实现海南旅游景点推荐系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

远程开发之vscode端口转发

远程开发之vscode端口转发 涉及的软件forwarded port 通过端口转发&#xff0c;实现在本地电脑上访问远程服务器上的内网的服务。 涉及的软件 vscode、ssh forwarded port 在ports界面中的port字段&#xff0c;填需要转发的IP:PORT&#xff0c;即可转发远程服务器中的内网端…

SSH镜像、systemctl镜像、nginx镜像、tomcat镜像

目录 一、SSH镜像 二、systemctl镜像 三、nginx镜像 四、tomcat镜像 五、mysql镜像 一、SSH镜像 1、开启ip转发功能 vim /etc/sysctl.conf net.ipv4.ip_forward 1sysctl -psystemctl restart docker 2、 cd /opt/sshd/vim Dockerfile 3、生成镜像 4、启动容器并修改ro…

AirServer2024官方最新版免费下载

AirServer官方版是一款使用方便的投屏软件&#xff0c;在教室&#xff0c;会议室以及游戏中极为方便。AirServer官方版支持IOS、Android、Windows、mac、Chromebook等多种设备&#xff0c;使用AirServer不需要其他的设备即可完成投屏操作&#xff0c;相比其他投屏软件&#xff…

星图地球——Landsat5_C2_TOA_T1数据集

简介 Landsat 5是美国陆地卫星系列&#xff08;Landsat&#xff09;的第五颗卫星&#xff0c;于1984年3月1日发射&#xff0c;2011年11月停止工作。16天可覆盖全球范围一次。Landsat5_C2_TOA数据集是由Collection2 level1数据通过MTL文件计算得到的TOA反射率产品。数据集的空间…

Spring Boot 中实现文件上传、下载、删除功能

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

VUE好看的个人简历模板

文章目录 1.设计来源1.1 首页界面1.2 关于我界面1.3 我的资历界面1.4 项目经验界面1.5 我的技能界面1.6 联系我界面 2.效果和源码2.1 动态效果2.2 源码目录结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/…

【python】12.字符串和正则表达式

使用正则表达式 正则表达式相关知识 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要&#xff0c;正则表达式就是用于描述这些规则的工具&#xff0c;换句话说正则表达式是一种工具&#xff0c;它定义了字符串的匹配模式&#xff08;…

网站万词霸屏推广系统源码:实现关键词推广,轻松提高关键词排名,带完整的安装部署教程

现如今&#xff0c;互联网的快速发展&#xff0c;网站推广成为企业网络营销的重要手段。而关键词排名作为网站推广的关键因素&#xff0c;一直备受关注。罗峰给大家分享一款网站万词霸屏推广系统源码&#xff0c;该系统可实现关键词推广&#xff0c;有效提高关键词排名&#xf…