002-基于Pytorch的手写汉字数字分类

本节将介绍一种

2.1 准备

2.1.1 数据集

(1)MNIST

只要学习过深度学习相关理论的人,都一定听说过名字叫做LeNet-5模型,它是深度学习三巨头只有Yann Lecun在1998年提出的一个CNN模型(很多人认为这是第一个具有实际应用价值的CNN模型)。在当年使用该模型可以很好地完成手写体数字的识别,而该模型所处理的手写体数字数据库称为MNIST。

MNIST全称是:Mixed National Institute of Standards and Technology databas,它包含70000张手写数字的灰度图片,每一张图片包含 28 X 28 个像素点。数据集被分为两部分,其中训练(mnist.train)集包括60000样本,测试集(mnist.test)包含10000样本。训练集又进一步封你为 55000 个样本用于训练,5000样本用于验证。下图是MNIST样本实例图。

MNIST数据集虽然经典,但也有问题。最主要的问题是,它太简单了!相对于现在动辄上百万个参数的“大”模型,MNIST数据集要小很多,且只是简单的十类问题,因此导致现有的模型在MNIST上的分类精度都超过了95%。为了更直观地观察不同算法间的性能差异,需要用一个更复杂一点的数据集,这时Fashion-MNIST出现了。

(2)Fashion-MNIST

FashionMNIST是一个替代MNIST的图像数据集。 它是由一家德国科技公司(Zalando)整理提供。FashionMNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分,28x28 的灰度图片。因此,能跑MNIST数据集的代码,只需稍加改动,就可以跑新的数据集。两个数据集的不同之处主要有两点,一是虽然两者都是以灰度图像呈现的,但MNIST呈现的是数字,背景设为0,前景设为1,FashionMNIST则是真正意义的灰度数据集。二是两者内容不同,前者被分类的是手写体数字,后者则是十类衣物服饰(分别是:T恤、裤子、套头衫、连衣裙、大衣、凉鞋、衬衫、运动鞋、包、短靴),其内容的复杂程度远高于手写体数字。下图是FashionMNIST的一个图示。

网上有很多基于FashionMNIST数据集的实例,在此就不再重复介绍。

本节实例选用的是中国版的MNIST,由英国纽卡斯尔大学整理并提供,我们不妨将其称为CHN-MNIST数据集。

(3)CHN-MNIST

该数据集共由100人书写,每人重复书写10遍,因此数据集样本数为1000组,每组包括15个汉字的数字,即“零、一、二、三、四、五、六、七、八、九、十、百、千、万、亿”,总样本数为15000。图像的分辨率为300*300。

2.1.2  模型

对于这样一个简单的分类任务,不需要使用太复杂的网络,前面提到的LeNet-5足能胜任。

对于LeNet-5网络模型的介绍,网上一搜一大把,在此不再赘述,只贴出该模型的示意图,供大家参考。

2.2 代码解析

下面将结合代码,一部分一部分的介绍具体的过程。

(1)载入必要的扩展库

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from tqdm import tqdm

由于是第一个例程,我们对所使用的扩展库详细加以介绍:

  • matplotlib库:用于绘图
  • numpy库:用于数值计算
  • pandas库:用于数据分析
  • torch库:提供Pytorch支持
  • PIL库:用于图像绘制
  • tqdm库:Python提供的进度条空间库

(2)设置参数

这一部分完成的是设置一些与模型训练有关的超参数。如下面代码所示:

batch_size = 32  # 批次大小
lr = 0.003  # 学习率
epochs = 10  # 迭代轮数
save_path = './best_model.pkl'  # 模型保存路径
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')  # 设备

各个参数的功能见注释,至于各个参数数值大小对最终结果的影响,将放在后续的章节介绍。其中最后一行是自动检测是否安装了cuda,如果是,则启动gpu加速。

(3)加载数据集

这一部分完成的是设置一些与模型训练有关的超参数。如下面代码所示:

class CustomDataset(Dataset):
    def __init__(self, k, l, csv_file='./chinese_mnist.csv'):
        self.df = pd.read_csv(csv_file)

        self.k = {'九': int(9), '十': int(10), '百': int(11), '千': int(12), '万': int(13), '亿': int(14), '零': int(0),
                  '一': int(1), '二': int(2), '三': int(3), '四': int(4), '五': int(5), '六': int(6), '七': int(7),
                  '八': int(8)}

        self.target = 'character'
        self.features = ['suite_id', 'sample_id', 'code', ]

        self.labels = np.asarray(self.df.iloc[:, 4])

        self.y = df[self.target]
        self.X = df.drop(self.target, axis=1)

    def __getitem__(self, idx):
        single_image_label = self.labels[idx]

        class_id = self.k[single_image_label]

        img = Image.open(f"./data/data/input_{self.X.iloc[idx, 0]}_{self.X.iloc[idx, 1]}_{self.X.iloc[idx, 2]}.jpg")
        img = np.array(img)

        return img, class_id

    def __len__(self):
        return len(self.X)

还需要对数据集进行一下预处理,便于后面的训练过程g

# 1.构建索引到汉字的映射字典
num2char = {int(9): '九', int(10): '十', int(11): '百',
            int(12): '千', int(13): '万', int(14): '亿',
            int(0): '零', int(1): '一', int(2): '二',
            int(3): '三', int(4): '四', int(5): '五',
            int(6): '六', int(7): '七', int(8): '八'}

# 2.读取csv处理文件
df = pd.read_csv('./chinese_mnist.csv', sep=',')

# 3.处理数据
train_df = df.groupby('value').apply(lambda x: x.sample(700, random_state=42)).reset_index(drop=True)
x_train, y_train = train_df.iloc[:, :-2], train_df.iloc[:, -2]

test_df = df.groupby('value').apply(lambda x: x.sample(300, random_state=42)).reset_index(drop=True)
x_test, y_test = test_df.iloc[:, :-2], test_df.iloc[:, -2]

(未完,待续)

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

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

相关文章

雷军把小爱同学喊崩了:小米SU7发布会触发全国小米音箱

站长之家(ChinaZ.com) 3月29日 消息:雷军在昨晚的小米SU7 发布会上意外地让全国的小爱同学陷入了一片混乱。 原来,小米SU7 搭载了一款先进的AI大模型,与小爱同学语音助手完美结合,为用户带来了前所未有的智驾体验。雷军在展示这一功能时&…

【话题】AI大模型学习:理论、技术与应用探索

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 背景1. AI大模型学习的基础理论1.1 机器学习1.2 深度学习 2. AI大模型学习的技术要点2.1 模型结构设计2.2 算法优化2.3 大规模数据处理 3. AI大模型学习的应用场景3.1 自…

Prometheus +Grafana +node_exporter可视化监控Linux + windows虚机

1、介绍 待补充 2、架构图 Prometheus :主要是负责存储、抓取、聚合、查询方面。 node_exporter :主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求:1台主服务器 n台从服务器 (被监控的linux或windows虚机&am…

让IIS支持.NET Web Api PUT和DELETE请求

前言 有很长一段时间没有使用过IIS来托管应用了,今天用IIS来托管一个比较老的.NET Fx4.6的项目。发布到线上后居然一直调用不同本地却一直是正常的,关键是POST和GET请求都是正常的,只有PUT和DELETE请求是有问题的。经过一番思考忽然想起来了I…

物联网实战--入门篇之(二)环境准备

目录 一、硬件清单 二、开发工具 三、嵌入式环境搭建 四、硬件连接(断电操作) 五、服务器搭建 六、Qt开发环境搭建 一、硬件清单 巧妇难为无米之炊,要想学习制作这么一个净化器需要购买必要的硬件设备,以下是清单,根据链接自行采购&…

Jenkins升级中的小问题

文章目录 使用固定版本安装根据jenkins页面下载war包升级jenkins重启jenkins报错问题解决 K8s部署过程中的一些小问题 ##### Jenkins版本小插曲 ​ 在Jenkins环境进行插件安装时全部清一色飘红,发现是因为Jenkins版本过低导致,报错的位置可以找到更新je…

新零售SaaS架构:客户管理系统的应用架构设计

客户管理系统的应用架构设计 应用层定义了软件系统的应用功能,负责接收用户的请求,协调领域层能力来执行任务,并将结果返回给用户,功能模块包括: 客户管理:核心功能模块,负责收集和更新客户信息…

IDEA跑Java后端项目提示内存溢出

要设置几个地方,都试一下吧: 1、默认是700,我们设置大一点(上次配置了这儿就解决了) 2、 3、 4、-Xmx4g

Linux repo基本用法: 搭建自己的repo仓库[服务端]

概述 Repo的使用离不开Git, Git 和 Repo 都是版本控制工具,但它们在使用场景和功能上有明显区别… Git 定义:Git 是一个分布式的版本控制系统,由 Linus Torvalds 为 Linux 内核开发而设计,现已成为世界上最流行的版本控制软件之…

Redis 基础命令集详解

目录 一、string 类型及操作 二、hash 类型及操作 三、list 类型和操作 四、set 类型及操作 五、zset类型及操作 六、其他相关命令 一、string 类型及操作 string是最简单的类型,一个key对应一个value,string类型是二进制安全的。redis的string可以…

硬件9、常用PCB封装的直接调用

拷贝过来之前的封装(适用于之前的项目创建过项目的,可以多个) ctrlA全选,然后ctrlc进行全部复制 然后切换到要使用的封装库里面进行粘贴 复制 在其他库文件中粘贴 单独复制一个封装 在PCB中使用ctrlc进行复制 切换到库中&…

保理业务风险评级及尽调

企业评级的作用 对核心企业进行评级,是为了初步判断核心企业(买方)的基本状况,确保开展业务后核心企业(买方)的还款能力;对融资企业(卖方)进行评级,是为了判…

消息队列经典应用场景

笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。 1 异步&解耦 笔者曾经负责某电…

SIP-6002D对讲终端使用说明 SIP对讲求助终端

SIP对讲终端SIP-6002D双按键是一款采用了ARMDSP架构;配置了麦克风输入和扬声器输出,SIP-6002D带两路寻呼按键,可实现SIP对讲功能,作为SIP对讲的终端,主要用于银行、部门机构、调度室、化工厂、钢铁厂、矿井、风电等场所…

彩信群发为奢侈品行业带来了哪些性化体验与互动?

彩信群发作为一种创新的营销手段,为奢侈品行业带来了诸多个性化体验与互动的机会。以下是一些具体的体现: 首先,彩信群发为奢侈品品牌提供了丰富的创意展示空间。通过嵌入高质量的图片、短视频和音频,品牌可以全方位、多角度地展示…

Vue——高德地图

1.官网上需要注册并登录高德地图开放平台,申请密钥(如图1)。(高德地图官网)选择Web端,添加成功后,可以获取到(图2)key和密钥 2.Vue项目终端安装地图加载包 npm i amap/amap-jsapi-loader --s…

6.二叉树——3.搜索树

二叉搜索树BST的特色 左<根<右中序序列有序 二叉搜索树构造 树为空&#xff0c;新结点作为根树不空&#xff0c;新结点与树根比大小 大往右走&#xff0c;小往左走 新结点插入空位 例题 代码 #include <cstdio> #include <string> #include <map>…

目标检测——交通专用车辆数据集

一、重要性及其意义 目标检测在交通管理领域&#xff0c;特别是在交通专用车辆数据集的构建上&#xff0c;具有显著的重要性和深远的意义。以下是对其重要性及其意义的详细探讨&#xff1a; 提升交通管理效率&#xff1a;通过精准的目标检测&#xff0c;交通管理部门可以迅速识…

regexp_substr()

1、基本语法 REGEXP_SUBSTR(String, pattern, position,occurrence, modifier) String&#xff1a;需要进行处理的字符串。 pattern&#xff1a;正则表达式。 position&#xff1a;起始位置&#xff08;从字符串的第几个开始&#xff0c;默认为1&#xff0c;注&#xff1a;…

基于springboot实现社区团购系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现社区团购系统演示 摘要 本课题是根据用户的需要以及网络的优势建立的一个社区团购系统&#xff0c;来满足用户团购的需求。 本社区团购系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于Spring Boot框架开发。在网站的整个开发过程中&…