pytorch深度学习案例(一)——手写数学符号识别

news2024/9/23 15:28:25

文章目录

  • 前言
  • 简介
    • 数据集
    • 项目结构
      • utils模块
        • dataLoader
        • models
        • plotShow
      • train模块
      • predict模块
    • 下载地址

前言

在前面的两篇文章中我们介绍了现代计算机视觉中常见的结构化和非结构化的CNN模型,本篇我们将使用这些CNN模型在手写数学符号数据集上进行识别。
CNN模型的介绍请参照之前的两篇文章,源码放到最后。

pytorch深度学习基础(十)——常用线性CNN模型的结构与训练

pytorch深度学习基础(十一)——常用结构化CNN模型构建

简介

数据集

所用的数据集是来自kaggleHandwritten math symbols dataset,其中包括超过30w张图片,共有82个类别。解压后的数据放到extracted_images中作为数据

数据集下载地址:
Handwritten math symbols dataset

项目结构

项目的组织形式如下
在这里插入图片描述

utils模块

utils中包括数据的加载,模型以及画图展示

dataLoader

idxPrepare
传入数据所在的路径,获取标签与索引的对应关系并以字典的形式保存,并返回由(图片,类别)组成的列表

image2txt
传入由(图片,类别)组成的列表,将数据集划分成训练数据和测试数据。并将路径以及对应的标签存放到txt文件中

MyLoader
使用torchvsion加载图片

MyDataLoader
由于数据量稍微有些大,直接使用torch的数据加载有可能会导致OOM,所以构建了一个数据加载的类,这个类并不会将所有的数据一次性全部加载到内存,而是将存有数据路径和对应的类别先全部加载到内存中,当需要用到数据时,再将数据从磁盘中读到内存当中。

LoadDataset
为了方便加载数据,构建了一个数据加载器,传入数据的路径,数据的批量大小和图片的大小,返回训练数据和测试数据的迭代器以供模型的训练

models

包含各种常见的CNN分类模型,包括LeNet、alexNet、vgg11、NiN、GoogLeNet、resNet18、denseNet模型的构建
select_model
用于选择模型,传入模型的名称以及模型的参数,返回选择的分类模型

plotShow

传入由训练损失、训练精度、测试损失、测试精度组成的字典,然后绘制出图像

train模块

用于训练模型
accuracy
传入预测结果和标签,用于评估预测精度
train
传入选择使用的模型,模型参数,训练数据、测试数据、训练轮次、学习率、训练设备、提前终止训练的阈值以及是否保存检查点,进行模型的训练,最终训练结果将会保存在model_weights文件夹中

predict模块

根据不同的参数设置可以进行预测,可选的预测模式有单张图片预测,从文件夹中预测以及随机选取测试集中的数据进行预测

下载地址

GitHub地址:Handwritten-math-symbols-recognition

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

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

相关文章

2022回顾

2022年回顾 前言 新年和亲朋好友的相聚差不多接近尾声,假期也所剩无几,开始静下心来写作,回顾一下我的2022年,看下自己去年 做得好的和不足,展望下2023,开始新一年的生活。(因为是公历2023年…

Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo

📚️Reference: https://github.com/grafana/intro-to-mlt 这是关于 Grafana 中可观察性的三个支柱的一系列演讲的配套资源库。 它以一个自我封闭的 Docker 沙盒的形式出现,包括在本地机器上运行和实验所提供的服务所需的所有组件。 Grafana 全栈可观察…

剑指 Offer 第9天 第10天

目录 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 47. 礼物的最大价值 剑指 Offer 46. 把数字翻译成字符串 剑指 Offer 48. 最长不含重复字符的子字符串 剑指 Offer 42. 连续子数组的最大和 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所…

Python self用法详解

在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数。例如,定义一个 Person 类:class Person: def__init__(self): print("正在执行构造方法") #…

大数据项目---电商数仓(三)

目录 1.即席查询_Presto概述 2.即席查询_Presto_Server的部署 3.即席查询_Presto_Server启动 4.即席查询_命令行客户端说明 5.即席查询_LZO说明 6.即席查询_Presto_web端口 ​编辑 7.即席查询_Presto使用注意事项/优化 8.即席查询_Kylin简介 9.即席查询_前置概念 10.即…

数据库系统结构、数据库系统的组成

文章目录一、数据库系统的三级模式结构1.模式(逻辑模式)2.外模式(子模式、用户模式)3.内模式(存储模式)二、数据库的二级映像功能1.外模式/模式映像2.模式/内模式映像3.实际应用三、数据库系统的组成---硬件…

安卓性能优化之内存优化

Java对象生命周期: 创建:为对象分配内存空间,构造对象应用:此时 对象至少被一个强引用持有不可见:未被任何强引用持有,进行可达性分析不可达:可达性分析为不可达,进入下一阶段收集&…

notes

等差:,求 解:、 ,则 解: x系数y系数1412 由 得分母 ;则分子为, 解:令 已知两边及夹角,可图解 解析几何条件转化 1.平行四边形条件的转化几何性质代数实现(1)对边平行斜…

【IoT】创业:如何找到可以主导的创业市场?

如果你想开始创业,开启一段不一样的旅程,那么你首先要做的就是选赛道! 如何选择你的赛道、你的第一个市场呢? 换句话说就是,你如何选择自己的利基市场。 最大的市场,同时,它的需求范围也最广…

全国地级市1999—2020年污染物排放和环境治理相关指标(废水\废气\粉尘等)

工业废水、工业粉尘等污染物是影响居住环境的重要因素,也是在各项研究中常用的数据!之前我们基于历年的《中国城市统计年鉴》整理了1999—2020年的人口相关数据和用地相关数据(可查看之前推送的文章)。在《中国城市统计年鉴》中也…

欧拉回路(模板+外加一些优化)

给定一张图,请你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次。 输入格式 第一行包含一个整数t, t∈ {1,2},如果t 1,表示所给图为无向图,如果t2,表示所给图为有向图。 第二行包含两个整数…

【MySQL】日志

https://www.cnblogs.com/myseries/p/10728533.html 在 MySQL 中,有多种不同的日志,包括错误日志、二进制日志、查询日志和慢查询日志,这些日志发挥着不同的作用。另外还有redo日志、undo日志和relay日志。 错误日志 错误日志是 MySQL 中最…

测试篇(四):测试用例的分类、按测试对象划分、按是否查看代码划分、你平时哪种测试方法用的多?、按照开发阶段划分

目录一、按测试对象划分1.1 界面测试1.2 可靠性测试1.3 容测性测试1.4 文档测试1.5 兼容性测试1.6 易用性测试1.7 安装卸载测试1.8 安全测试1.9 性能测试1.10 内存泄露测试1.11 弱网测试二、按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.4 灰盒测试三、面试题:你平…

AcWing 327. 玉米田(状态压缩DP)

AcWing 327. 玉米田(状态压缩DP)一、问题二、分析1、思路2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、思路 这道题与之前所讲解的AcWing 1064. 小国王(状态压缩DP)非常相似,所以如果…

ARM uboot 的源码目录分析

一、uboot的源码目录分析1 1、九鼎官方 uboot 和三星原版 uboot 对比 (1) 以九鼎官方的 uboot 为蓝本来学习的,以三星官方的这份为对照。 (2) 不同版本的 uboot 或者同一版本不同人移植的 uboot,可能目录结构和文件内容都有所不同。将来大家懂了后也可…

剑指 Offer 第8天

目录 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 10- II. 青蛙跳台阶问题 剑指 Offer 63. 股票的最大利润 剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N)&#xf…

java并发编程面试题目及答案2(持续更新)

22、利用原子类手写 CAS 无锁 /** * 利用 cas 手写 锁 */ public class AtomicTryLock {private AtomicLong atomicLongnew AtomicLong(0);private Thread lockCurrentThread; /** * 1 表示锁已经被获取 0 表示锁没有获取 利用 cas 将 0 改为 1 成功则表示获取锁 * return */…

Linux find 命令

Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。语法find path -option [ -pr…

微服务-高并发-思路

一、为什么选择Go语言 Go 语言相对其它语言具有几点天然的优势: 语法简单,上手快性能高,编译快,开发效率也不低原生支持并发,协程模型是非常优秀的服务端模型,同时也适合网络调用部署方便,编译…

C语言深度解剖-关键字(3)

目录 1.关键字 sizeof C语言基本数据类型 认识 sizeof sizeof 相关扩展: 2. signed 与 unsigned 关键字 整形在内存的存储 如何快速转换二进制 写在最后: 1.关键字 sizeof C语言基本数据类型 以下是C语言基本的数据类型: 定义变量的…