手写数字识别加法器--深度学习实验

news2024/12/24 2:26:43

上次老师布置了一个实验:

手写数字识别--深度学习实验-CSDN博客

这次在上次的基础上又布置了一个实验,也是做了好久才做出,所以把实验报告放到CSDN保存,自己忘了方便查阅,也为其他人提供借鉴。

实验源码自取:

手写数字识别加法器.zip - 蓝奏云

手写数字加法器

  • 实验目标和要求

目标:

1.学会pytorch框架。

2.学会CNN网络原理。

3.学会迁移学习原理。

近年来,迁移学习受到广泛关注,相关研究呈现出持续的指数式增长,在计算机视觉、自然语言处理、语音识别等领域,已经掀起了新一波的浪潮,有望引领下一代人工智能商业化应用。本实验针对MNIST手写数字识别数据集,首先设计实现一个手写数字识别模型,然后在此基础之上,利用迁移学习,实现一个手写数字加法器,输入两张手写数字图像,输出这两个数字的和。具体要求如下:

1. 在PyCharm平台上,基于PyTorch实现。

2. 使用第一次实验的MNIST数据集。

3. 首先设计实现一个基于PyTorch的CNN模型,训练、测试,保留其最优参数。

4. 基于第三步的模型,通过迁移学习,以“微调”方式实现端到端的手写加法器。模型的输入是手写数字图像,最终输出是对应两个数字的和。

5. 不使用迁移学习,从头开始训练一个CNN模型,实现同样的手写数字加法功能。

6. 在同一张图上画出两种方法的错误率曲线图,横坐标为训练时间或者迭代次数,纵坐标为错误率。

7. 结合曲线图,对两种方法进行分析比对。

  • 实验过程(含错误调试)

1.迁移模型

神经网络结构图:

模型的处理流程:

首先设计实现一个基于PyTorch的CNN模型,训练、测试,保留其最优参数,跟上次实验一样。保留的模型命名为cnn.pth,留着进行下一步。

打开并统计数据集,发现训练集有50000个,验证集有10000个,测试集有10000个。根据题目要求,把训练集和验证集分成两部分,测试集单独加载图片进行测试。

对各两部分数据集的图像矩阵转成张量 ,把图像张量和目标张量一一对应放到 TensorDataset()函数转成迭代器对象,然后调用DataLoader()函数分批打包数据,生成迭代器对象。最终返回两个训练集对象,两个验证集对象。单独加载测试图片,把mnist.pkl里的图片imwrite()保存下载来,编号为1到20,加载图片和数字,转成张量放到字典,用于测试。

定义Adder类,继承Model类,实现初始化网络、把预训练好的手写数字识别网络模型对象传入加法器模型,再定义全连接层Linear(20,19)和Linear(19,19),对于每次输入的两张图片,先输入到预训练的模型,分别输出张量为10的概率值,把这两个张量拼接在一起,输入到20个神经元的层,由于两个数相加最大值为18,最小值为0,模型经过训练学习,输出19个值,最大值的数对应的下标就是两个数相加的结果。

加法器模型迭代10次,输入训练数据进行前向传播,把结果放进交叉熵损失函数、后向传播计算梯度,更新参数,验证模型,继续迭代,寻找最优参数。

简单版手写数字加法器 - 飞桨AI Studio星河社区 (baidu.com)

2.非迁移模型

神经网络结构图:

模型的处理流程:

定义MNIST_Adder类,继承Model类,参考上面迁移模型的想法,使用Sequential()函数将模型模块化,分成conv卷积模块和fc全连接模块,对于每次输入的两张图片,conv卷积模块负责对图片进行卷积和最大池化操作,分别获得维度为2000的特征向量,然后把这两个特征向量拼接在一起输入全连接层,最后输出长度为19的张量,里面最大值的下标索引就是两个数的相加结果。

加法器模型迭代10次,输入训练数据进行前向传播,把结果放进交叉熵损失函数、后向传播计算梯度,更新参数,验证模型,继续迭代,寻找最优参数。

迁移模型:

当批量大小batch_size=200,迭代次数为10,AdamW优化器的参数lr=0.003,weight_decay=0.002,使用交叉熵损失函数时,运行结果如下:

验证精度在到达95%时开始收敛,最高有96%,为了防止偶然性,使用10组图片进行测试,10组图片的数字相加结果都正确。

非迁移模型:

当批量大小batch_size=200,迭代次数为10,AdamW优化器的参数lr=0.002,weight_decay=0.003,使用交叉熵损失函数时,运行结果如下:

验证精度在到达94%时开始收敛,为了防止偶然性,使用10组图片进行测试,10组图片的数字相加结果中有一组错误。

可见非迁移模型的验证精度和测试结果准确率都不如迁移模型的。

......

  • 总结

学到了许多,对pytorch框架的使用更熟练了。

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

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

相关文章

FFA 2023|字节跳动 7 项议题入选

Flink Forward 是由 Apache 官方授权的 Apache Flink 社区官方技术大会,作为最受 Apache Flink 社区开发者期盼的年度峰会之一,FFA 2023 将持续集结行业最佳实践以及 Flink 最新技术动态,是中国 Flink 开发者和使用者不可错过的的技术盛宴。 …

C#中的async/await异步编程模型

前言 当谈到异步编程时,C#中的async/await是一个强大且方便的工具。它使得编写并发和异步操作变得更加简单和可读,同时提供良好的可维护性。本文将详细解释async/await的使用,以及如何在C#中有效地利用它来实现异步操作。 目录 前言1. async…

项目监控:项目跟踪和控制的工具和步骤

项目管理不仅仅是分配和审查任务,还包括平衡团队成员的工作量、创建预测和避免障碍的工作流程。整个过程涉及许多步骤,因此,项目监控成为了成功业务活动的关键之一,是项目经理确保与团队共同实施的计划顺利进行的方式。 项目监控为…

细胞级浮游藻类智能检测系统

产品信息 新一代浮游藻类智能检测系统问世!英视江河首次将藻类检测精度提升到细胞级!英视江河致力于新一代浮游生物的识别、计数。特征是群体藻类和群体种个体均精准检测!目前设备已在山东、宁夏、内蒙多地实际应用。 郑州英视江河生态环境科…

爬虫http代理有什么用处?怎么高效使用HTTP代理?

在进行网络爬虫工作时,我们有时会遇到一些限制,比如访问频率限制、IP被封等问题。这时,使用HTTP代理可以有效地解决这些问题,提高爬虫的工作效率。本文将介绍爬虫HTTP代理的用处以及如何高效地使用HTTP代理。 一、爬虫HTTP代理的用…

leetCode 17.电话号码的字母组合 + 回溯算法 + 图解 + 笔记

17. 电话号码的字母组合 - 力扣(LeetCode) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1&…

汽车电子 -- 车载ADAS之DOW(开门预警 )

相关法规文件: DOW: GB/T XXXXX—XXXX 乘用车车门开启预警系统性能要求及试验方法 一、开门预警 DOW(Door open Warning) 参看:功能定义-开门碰撞预警 在停车状态即将开启车门时,监测车辆侧方及侧后方的其它道路使…

pdf文件能扫码查看吗?一键做文本二维码

pdf格式是常用的一种文件格式,很多资料、展示性的内容都会选择这种格式,现在很多人都需要将文件生成二维码图片后分享给他人,那么文件存入二维码展示的方法有哪些呢?下面给大家分享一招使用二维码生成器来生成二维码图片的操作方法…

UE5学习(游戏存档,两种适应性的射线检测,时间膨胀)

游戏存档 0.建立游戏存档类 1.建立存档 命名要用规律,读档时根据命名调用 2.读取存档 这里是用存档时间(秒)验证是否有存档成功。 两种鼠标位置射线检测方法 两种适用性未使用大量项目验证,为个人观点 1.适用于游戏中 2.适用于…

关于Linux服务器高并发场景下系统参数优化的诸多奇技淫巧

文章目录 🔊博主介绍🥤本文内容开篇内存优化——马达与燃油磁盘优化——加油与换胎网络参数优化——挂挡与提速进程优化——适度开疆拓土 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Ja…

Python+Appium自动化测试大法,让你的测试效率飞升,绝不等待!封装元素定位方法超详解!

在appium自动化测试脚本运行的过程中,因为网络不稳定、测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待的方法来避免这种…

视频文案怎么写,媒介盒子支招

近几年短视频成为风口,各行各业都想分一杯羹,但是一头热的你,是否知道短视频的相关文案怎么写呢?正所谓兵马未动,文案先行,一个合适的文案是上热门的秘密武器,今天媒介盒子就来和大家聊聊:视频…

力扣2.两数相加

题目描述 把题读懂后,这道题存在两个需要解决的问题:1.进位问题;2.两个链表长度不一 代码 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//创建新链表的伪指针,指向链表的头结点ListNode prev n…

Spring源码解读之创建bean

本文章我们会解读一下Spring如何根据beanDefinition创建bean的; 代码入口: AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);applicationContext.refresh(); 当spring执行refresh(…

人工智能-产生式系统实验(动物识别)

1.实验目的 1.熟悉知识的表示方法 2.掌握产生式系统的运行机制 3.产生式系统推理的基本方法。 2.实验内容 运用所学知识,设计并编程实现一个小型动物识别系统,能识别虎、金钱豹、斑马、长颈鹿、鸵鸟、企鹅、信天翁等七种动物的产生式系统。 规则库&…

什么是虚拟化?如何监控虚拟化设备

虚拟化是创建物理 IT 资源(如服务器或桌面)的虚拟版本的行为,虚拟机(VM)是在物理主机设备上创建的,VM 的行为与物理设备完全相同,并且可以从主机运行不同的操作系统。 例如,您可以在…

centos服务器扩容

centos服务器扩容 我的情况是,原服务器是一个80g磁盘,管理员又追加了120G到这块磁盘上,需要把这120G重新追加使用。 请确认你遇到的情况是否和我初始截图一致,再往下看,免得浪费时间与精力 服务器中有120G尚未使用&…

智能测径仪从这五大方面提升了性能

在测径仪的研发升级中,蓝鹏测控从未停下脚步,研究新的技术,让测径仪更好的为产线服务的功能。目前提供两种类型的在线测径仪,普通测径仪与智能测径仪,智能型主要在这五大方面进行了性能提升。 1、自动化程度 智能测径…

Update this scope and remove the “systemPath“

问题 解析: 在特定的指定路径上查找系统相关性。这大大降低了可移植性,因为如果您将工件部署在一个与您的环境不同的环境中,代码将无法工作。 解决: 1 使用官方maven仓库的第三方jar包 2 如果官方仓库不存在jar包,…

抖去推--短视频账号矩阵系统saas工具源码技术开发(源头)

一、短视频矩阵系统搭建常见问题? 1、抖去推的短视频AI矩阵营销软件需要一定的技术水平吗? 答:不需要。产品简单易用,不需要具备专业的技术水平,即使是初学者,也能够轻松上手操作。 3、抖去推的短视频AI矩…