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

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

手写数字识别--深度学习实验-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框架的使用更熟练了。

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

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

相关文章

关于easy-es的聚合问题-已解决

es实体类&#xff1a; public class ChemicalES {IndexId(type IdType.CUSTOMIZE)private Long id;HighLightIndexField(fieldType FieldType.TEXT, analyzer "ik_max_word")private String name;IndexField(fieldType FieldType.KEYWORD)private List<Stri…

记一次深入内核的数据库高并发性能优化实践

前不久&#xff0c;我们接到客户长江电力的反馈&#xff0c;称在生产环境中进行高并发查询&#xff0c;例如包含数百个测点的近千个并发作业&#xff0c;在从近三月的数据中取数或聚合计算时&#xff0c;会出现作业超时&#xff0c;但CPU利用率却很低。 接到反馈后&#xff0c…

rabbitMQ对优先级队列的使用

注意事项&#xff1a; 1.队列设置优先级 权制范围&#xff08;0-255&#xff09;推荐0-10 否则浪费CPU与内存 2.发消息时给消息设置优先级 3.消息需要完全事先在队列中&#xff0c;在被消费者消费 会被排序&#xff0c;否则边生产边消费不会达到预期的队列优先效果。 优先级队列…

Skywalking接入实际应用做日志跟踪

Skywalking客户端挂载 从官网下载skywalking-agent客户端&#xff0c;并挂在到应用服务器指定目录 挂载到应用主机中,好处是解决打包应用镜像的时候&#xff0c;镜像过大&#xff0c;部署成本过高。 docker-compose部署应用,并接入skywalking服务,这里以gateway为例 versio…

vr红色教育虚拟展馆全景制作提升单位品牌形象

720全景展馆编辑平台以其独特的优势&#xff0c;为展览行业带来了革命性的变革。这种创新的技术应用为参展商提供了更高效、更便捷、更全面的展示解决方案&#xff0c;进一步提升了展览行业的水平和影响力。 一、提升展示效果&#xff0c;增强品牌形象 720全景展馆编辑平台通过…

Aseprite for mac(像素动画制作工具)

Aseprite是一款专业的像素绘图软件&#xff0c;旨在方便用户创建动画和像素艺术作品。该软件提供了一系列强大的绘图工具和动画功能&#xff0c;使其成为许多游戏开发者、动画师和艺术家的首选工具之一。 Aseprite具有用户友好的界面&#xff0c;易于上手&#xff0c;使用户可以…

MAX/MSP SDK学习06:内存管理

提供两种内存分配方式&#xff1a;①简单指针&#xff0c;②句柄&#xff08;二级指针&#xff09;&#xff1b;官方文档建议使用前者。 // 简单指针 char *ptr; ptr sysmem_newptr(2000); post("I have a pointer %lx and it is %ld bytes in size",ptr, sysmem_p…

存在即合理,低代码的探索之路

目录 一、前言 二、低代码迅速流行的原因 三、稳定性和生产率的最佳实践 四、程序员用低代码开发应用有哪些益处&#xff1f; 1、提升开发价值 2、利于团队升级 一、前言 低代码的热潮至今未消停&#xff0c;从阿里钉钉跨平台协作方式&#xff0c;再到飞书上的审批流程&#xf…

OMP: Error #15: Initializing libiomp5md.dll

问题描述 在conda虚拟环境运行程序时&#xff0c;出现以下的错误&#xff1a; 问题原因 anaconda的环境下存在两个libiomp5md.dll文件。 解决方法 一、在代码上加上限制&#xff08;每次都得加&#xff09; import os os.environ[KMP_DUPLICATE_LIB_OK]True 这种方法解决不…

6.一维数组——用冒泡法,选择法将5个整数由大到小排序

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码&#xff08;冒泡法&#xff09;程序运行代码&#xff08;选择法&#xff09; 前言 本系列为一维数组编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 用冒泡法将5个整数由大到小排序 二、题目…

印刷企业建设数字工厂管理系统的工作内容有哪些

随着科技的不断进步&#xff0c;数字工厂管理系统在印刷企业中的应用越来越广泛。这种系统可以有效地整合企业内外资源&#xff0c;提高生产效率&#xff0c;降低生产成本&#xff0c;并为印刷企业提供更好的业务运营与管理模式。本文将从以下几个方面探讨印刷企业建设数字工厂…

奇异值分解SVD(Singular Value Decomposition)

一种理解方式&#xff0c;值得学习&#xff08;分解时空矩阵&#xff09; 先在这里阐述一下SVD的用途吧&#xff0c;具体细节稍后再做补充 1.通过SVD对数据的处理&#xff0c;我们可以使用小得多的数据集来表示原始数据集&#xff0c;这样做实际上是去除了噪声和冗余信息&…

开发定制化抖音票务小程序的技术解析

通过定制化抖音票务小程序&#xff0c;可以为用户提供更加个性化的活动体验&#xff0c;同时也为企业和品牌提供了更多的营销机会。 一、小程序开发框架的选择 在开发定制化抖音票务小程序之前&#xff0c;选择合适的小程序开发框架至关重要。目前&#xff0c;主流的小程序框…

提高项目估算准确性的常用技巧

项目估算准确性对项目而言非常重要&#xff0c;其为项目决策提供依据&#xff0c;有助于进行资源规划&#xff0c;更好地进行风险管理和进度管理等。如果项目估算不准确&#xff0c;很可能导致项目成本超出预算&#xff0c;资源不足等问题&#xff0c;这增加了项目的风险和不确…

【Linux】匿名管道+进程池

文章目录 前置知识一、管道的原理二、管道的特性三、管道的接口四、使用管道实现简单的进程池解决进程池的一个小问题 前置知识 一个进程在创建时&#xff0c;会默认打开三个文件&#xff0c;分别是&#xff1a;stdin&#xff0c;stdout&#xff0c;stderr 进程中有一个维护进…

Leetcode—55.跳跃游戏【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—55.跳跃游戏 贪心法实现代码 #define MAX(a, b) ((a > b)? (a): (b))bool canJump(int* nums, int numsSize) {int k 0;for(int i 0; i < numsSize; i) {if(i > k) {return false;}k MAX(k, i nums[i]);}r…

DDR-MIG 学习记录

MIG调试总结&#xff1a; 对vivado软件中用于控制DDR2 / DDR3 的 控制器MIG(Memory Interface Generator)IP核进行了仿真测试&#xff0c;以学习如何用IP核来控制FPGA板载SDRAM的读写。我们只需要学会MIG的接口控制就可以。 ①配置IP核 Xilinx 的 DDR 控制器的名称简写为 MIG&…

vue3+vite+ts项目打包时出错

项目中引入了element-plus国家化的配置&#xff0c;然后进行项目打包&#xff0c;报下面的错误 解决方法&#xff1a; 在main.ts中添加 // ts-ignore

【SQL SERVER】定时任务

oracle是定时JOB&#xff0c;sqlserver是创建作业&#xff0c;通过sqlserver代理实现 先看SQL SERVER代理得服务有没有开 选择计算机右键——>管理——>服务与应用程序——>服务——>SQL server 代理 然后把SQL server 代理&#xff08;MSSQLSERVER&#xff09;启…

Vue和React配置解决跨域,proxy代理两步搞定

Vue配置&#xff1a; 第一步&#xff1a; 找到 vite.config.js 文件 进行如下代码配置 import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; export default defineConfig({plugins: [vue()],server: {/*** /api 是代理标识*/p…