基于Pytorch深度学习神经网络MNIST手写数字识别系统源码(带界面和手写画板)

 第一步:准备数据

mnist开源数据集

第二步:搭建模型

我们这里搭建了一个LeNet5网络

参考代码如下:

import torch
from torch import nnclass Reshape(nn.Module):def forward(self, x):return x.view(-1, 1, 28, 28)class LeNet5(nn.Module):def __init__(self):super(LeNet5, self).__init__()self.net = nn.Sequential(Reshape(),# CONV1, ReLU1, POOL1nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2),# nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),# CONV2, ReLU2, POOL2nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),nn.Flatten(),# FC1nn.Linear(in_features=16 * 5 * 5, out_features=120),nn.ReLU(),# FC2nn.Linear(in_features=120, out_features=84),nn.ReLU(),# FC3nn.Linear(in_features=84, out_features=10))# 添加softmax层self.softmax = nn.Softmax()def forward(self, x):logits = self.net(x)# 将logits转为概率prob = self.softmax(logits)return probif __name__ == '__main__':model = LeNet5()X = torch.rand(size=(256, 1, 28, 28), dtype=torch.float32)for layer in model.net:X = layer(X)print(layer.__class__.__name__, '\toutput shape: \t', X.shape)X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32)print(model(X))

第三步:训练代码

import torch
from torch import nn
from torchvision import datasets
from torchvision.transforms import ToTensor
from torch.utils.data import DataLoaderfrom model import LeNet5# DATASET
train_data = datasets.MNIST(root='./data',train=False,download=True,transform=ToTensor()
)test_data = datasets.MNIST(root='./data',train=False,download=True,transform=ToTensor()
)# PREPROCESS
batch_size = 256
train_dataloader = DataLoader(dataset=train_data, batch_size=batch_size)
test_dataloader = DataLoader(dataset=test_data, batch_size=batch_size)
for X, y in train_dataloader:print(X.shape)		# torch.Size([256, 1, 28, 28])print(y.shape)		# torch.Size([256])break# MODEL
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = LeNet5().to(device)# TRAIN MODEL
loss_func = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(params=model.parameters())def train(dataloader, model, loss_func, optimizer, epoch):model.train()data_size = len(dataloader.dataset)for batch, (X, y) in enumerate(dataloader):X, y = X.to(device), y.to(device)y_hat = model(X)loss = loss_func(y_hat, y)optimizer.zero_grad()loss.backward()optimizer.step()loss, current = loss.item(), batch * len(X)print(f'EPOCH{epoch+1}\tloss: {loss:>7f}', end='\t')# Test model
def test(dataloader, model, loss_fn):size = len(dataloader.dataset)num_batches = len(dataloader)model.eval()test_loss, correct = 0, 0with torch.no_grad():for X, y in dataloader:X, y = X.to(device), y.to(device)pred = model(X)test_loss += loss_fn(pred, y).item()correct += (pred.argmax(1) == y).type(torch.float).sum().item()test_loss /= num_batchescorrect /= sizeprint(f'Test Error: Accuracy: {(100 * correct):>0.1f}%, Average loss: {test_loss:>8f}\n')if __name__ == '__main__':epoches = 80for epoch in range(epoches):train(train_dataloader, model, loss_func, optimizer, epoch)test(test_dataloader, model, loss_func)# Save modelstorch.save(model.state_dict(), 'model.pth')print('Saved PyTorch LeNet5 State to model.pth')

第四步:统计训练过程

EPOCH1	loss: 1.908403	Test Error: Accuracy: 58.3%, Average loss: 1.943602EPOCH2	loss: 1.776060	Test Error: Accuracy: 72.2%, Average loss: 1.750917EPOCH3	loss: 1.717706	Test Error: Accuracy: 73.6%, Average loss: 1.730332EPOCH4	loss: 1.719344	Test Error: Accuracy: 76.0%, Average loss: 1.703456EPOCH5	loss: 1.659312	Test Error: Accuracy: 76.6%, Average loss: 1.694500EPOCH6	loss: 1.647946	Test Error: Accuracy: 76.9%, Average loss: 1.691286EPOCH7	loss: 1.653712	Test Error: Accuracy: 77.0%, Average loss: 1.690819EPOCH8	loss: 1.653270	Test Error: Accuracy: 76.8%, Average loss: 1.692459EPOCH9	loss: 1.649021	Test Error: Accuracy: 77.5%, Average loss: 1.686158EPOCH10	loss: 1.648204	Test Error: Accuracy: 78.3%, Average loss: 1.678802EPOCH11	loss: 1.647159	Test Error: Accuracy: 78.4%, Average loss: 1.676133EPOCH12	loss: 1.647390	Test Error: Accuracy: 78.6%, Average loss: 1.674455EPOCH13	loss: 1.646807	Test Error: Accuracy: 78.4%, Average loss: 1.675752EPOCH14	loss: 1.630824	Test Error: Accuracy: 79.1%, Average loss: 1.668470EPOCH15	loss: 1.524222	Test Error: Accuracy: 86.3%, Average loss: 1.599240EPOCH16	loss: 1.524022	Test Error: Accuracy: 86.7%, Average loss: 1.594947EPOCH17	loss: 1.524296	Test Error: Accuracy: 87.1%, Average loss: 1.588946EPOCH18	loss: 1.523599	Test Error: Accuracy: 87.3%, Average loss: 1.588275EPOCH19	loss: 1.523655	Test Error: Accuracy: 87.5%, Average loss: 1.586576EPOCH20	loss: 1.523659	Test Error: Accuracy: 88.2%, Average loss: 1.579286EPOCH21	loss: 1.523733	Test Error: Accuracy: 87.9%, Average loss: 1.582472EPOCH22	loss: 1.523748	Test Error: Accuracy: 88.2%, Average loss: 1.578699EPOCH23	loss: 1.523788	Test Error: Accuracy: 88.0%, Average loss: 1.579700EPOCH24	loss: 1.523708	Test Error: Accuracy: 88.1%, Average loss: 1.579758EPOCH25	loss: 1.523683	Test Error: Accuracy: 88.4%, Average loss: 1.575913EPOCH26	loss: 1.523646	Test Error: Accuracy: 88.7%, Average loss: 1.572831EPOCH27	loss: 1.523654	Test Error: Accuracy: 88.9%, Average loss: 1.570528EPOCH28	loss: 1.523642	Test Error: Accuracy: 89.0%, Average loss: 1.570223EPOCH29	loss: 1.523663	Test Error: Accuracy: 89.0%, Average loss: 1.570385EPOCH30	loss: 1.523658	Test Error: Accuracy: 88.9%, Average loss: 1.571195EPOCH31	loss: 1.523653	Test Error: Accuracy: 88.4%, Average loss: 1.575981EPOCH32	loss: 1.523653	Test Error: Accuracy: 89.0%, Average loss: 1.570087EPOCH33	loss: 1.523642	Test Error: Accuracy: 88.9%, Average loss: 1.571018EPOCH34	loss: 1.523649	Test Error: Accuracy: 89.0%, Average loss: 1.570439EPOCH35	loss: 1.523629	Test Error: Accuracy: 90.4%, Average loss: 1.555473EPOCH36	loss: 1.461187	Test Error: Accuracy: 97.1%, Average loss: 1.491042EPOCH37	loss: 1.461230	Test Error: Accuracy: 97.7%, Average loss: 1.485049EPOCH38	loss: 1.461184	Test Error: Accuracy: 97.7%, Average loss: 1.485653EPOCH39	loss: 1.461156	Test Error: Accuracy: 98.2%, Average loss: 1.479966EPOCH40	loss: 1.461335	Test Error: Accuracy: 98.2%, Average loss: 1.479197EPOCH41	loss: 1.461152	Test Error: Accuracy: 98.7%, Average loss: 1.475477EPOCH42	loss: 1.461153	Test Error: Accuracy: 98.7%, Average loss: 1.475124EPOCH43	loss: 1.461153	Test Error: Accuracy: 98.9%, Average loss: 1.472885EPOCH44	loss: 1.461151	Test Error: Accuracy: 99.1%, Average loss: 1.470957EPOCH45	loss: 1.461156	Test Error: Accuracy: 99.1%, Average loss: 1.471141EPOCH46	loss: 1.461152	Test Error: Accuracy: 99.1%, Average loss: 1.470793EPOCH47	loss: 1.461151	Test Error: Accuracy: 98.8%, Average loss: 1.474548EPOCH48	loss: 1.461151	Test Error: Accuracy: 99.1%, Average loss: 1.470666EPOCH49	loss: 1.461151	Test Error: Accuracy: 99.1%, Average loss: 1.471546EPOCH50	loss: 1.461151	Test Error: Accuracy: 99.0%, Average loss: 1.471407EPOCH51	loss: 1.461151	Test Error: Accuracy: 98.8%, Average loss: 1.473795EPOCH52	loss: 1.461164	Test Error: Accuracy: 98.2%, Average loss: 1.480009EPOCH53	loss: 1.461151	Test Error: Accuracy: 99.2%, Average loss: 1.469931EPOCH54	loss: 1.461152	Test Error: Accuracy: 99.2%, Average loss: 1.469916EPOCH55	loss: 1.461151	Test Error: Accuracy: 98.9%, Average loss: 1.472574EPOCH56	loss: 1.461151	Test Error: Accuracy: 98.6%, Average loss: 1.476035EPOCH57	loss: 1.461151	Test Error: Accuracy: 98.2%, Average loss: 1.478933EPOCH58	loss: 1.461150	Test Error: Accuracy: 99.4%, Average loss: 1.468186EPOCH59	loss: 1.461151	Test Error: Accuracy: 99.4%, Average loss: 1.467602EPOCH60	loss: 1.461151	Test Error: Accuracy: 99.1%, Average loss: 1.471206EPOCH61	loss: 1.461151	Test Error: Accuracy: 98.8%, Average loss: 1.473356EPOCH62	loss: 1.461151	Test Error: Accuracy: 99.2%, Average loss: 1.470242EPOCH63	loss: 1.461150	Test Error: Accuracy: 99.1%, Average loss: 1.470826EPOCH64	loss: 1.461151	Test Error: Accuracy: 98.7%, Average loss: 1.474476EPOCH65	loss: 1.461150	Test Error: Accuracy: 99.3%, Average loss: 1.469116EPOCH66	loss: 1.461150	Test Error: Accuracy: 99.4%, Average loss: 1.467823EPOCH67	loss: 1.461150	Test Error: Accuracy: 99.5%, Average loss: 1.466486EPOCH68	loss: 1.461152	Test Error: Accuracy: 99.3%, Average loss: 1.468688EPOCH69	loss: 1.461150	Test Error: Accuracy: 99.5%, Average loss: 1.466256EPOCH70	loss: 1.461150	Test Error: Accuracy: 99.5%, Average loss: 1.466588EPOCH71	loss: 1.461150	Test Error: Accuracy: 99.6%, Average loss: 1.465280EPOCH72	loss: 1.461150	Test Error: Accuracy: 99.4%, Average loss: 1.467110EPOCH73	loss: 1.461151	Test Error: Accuracy: 99.6%, Average loss: 1.465245EPOCH74	loss: 1.461150	Test Error: Accuracy: 99.5%, Average loss: 1.466551EPOCH75	loss: 1.461150	Test Error: Accuracy: 99.5%, Average loss: 1.466001EPOCH76	loss: 1.461150	Test Error: Accuracy: 99.3%, Average loss: 1.468074EPOCH77	loss: 1.461151	Test Error: Accuracy: 99.6%, Average loss: 1.465709EPOCH78	loss: 1.461150	Test Error: Accuracy: 99.5%, Average loss: 1.466567EPOCH79	loss: 1.461150	Test Error: Accuracy: 99.6%, Average loss: 1.464922EPOCH80	loss: 1.461150	Test Error: Accuracy: 99.6%, Average loss: 1.465109

第五步:搭建GUI界面

第六步:整个工程的内容

有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”

 代码的下载路径(新窗口打开链接)基于Pytorch深度学习神经网络MNIST手写数字识别系统源码(带界面和手写画板)

有问题可以私信或者留言,有问必答

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

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

相关文章

【数据结构】C++语言实现二叉树的介绍及堆的实现(详细解读)

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

分布式系统的一致性与共识算法(三)

顺序一致性(Sequential Consistency) ZooKeeper 一种说法是ZooKeeper是最终一致性,因为由于多副本、以及保证大多数成功的ZAB协议,当一个客户端进程写入一个新值,另外一个客户端进程不能保证马上就能读到这个值,但是能保证最终能…

【车载开发系列】SID$11服务配置

【车载开发系列】SID$11服务配置 前言 ECUReset(ECU重置),ECU作为Server端,执行Client发送来ECU Reset请求中重启的类型(通过子服务区分)。对于UDS协议关于处理该请求的逻辑,没有强制性定义。 Step1:SID和SubFunction的追加 BasicEditor→Dcm→DcmConfigSet→DcmDs…

vs2019 c++里用 typeid() . name () 与 typeid() . raw_name () 测试数据类型的区别

(1) 都知道,在 vs2019 里用 typeid 打印的类型不大准,会主动去掉一些修饰符, const 和引用 修饰符会被去掉。但也可以给咱们验证学到的代码知识提供一些参考。那么今天发现其还有 raw_name 成员函数,这个函…

AES分组密码

一、AES明文和密钥位数 RIJNDAEL 算法数据块长度和密钥长度都可独立地选定为大于等于 128 位且小于等于 256 位的 32 位的任意倍数。 而美国颁布 AES 时却规定数据块的长度为 128 位、密钥的长度可分别选择为 128 位, 192 位或 256 位 1.1 状态 中间结果叫做状态…

建模:3dmax

3Dmax 制作模型和动画(橘肉); RizomUV 对模型进行展UV(橘皮); Substance Painter 纹理手绘(给橘皮制定想要的皮肤); 1.基础 1.1可编辑多边形、可编辑样条线 体、面都需要…

Polylang Pro插件下载:多语言网站构建的终极解决方案

在全球化的今天,多语言网站已成为企业拓展国际市场的重要工具。然而,创建和管理一个多语言网站并非易事。幸运的是,Polylang Pro插件的出现,为WordPress用户提供了一个强大的多语言解决方案。本文将深入探讨Polylang Pro插件的功能…

暴力数据结构之二叉树(堆的相关知识)

1. 堆的基本了解 堆(heap)是计算机科学中一种特殊的数据结构,通常被视为一个完全二叉树,并且可以用数组来存储。堆的主要应用是在一组变化频繁(增删查改的频率较高)的数据集中查找最值。堆分为大根堆和小根…

什么是最大路径?什么是极大路径?

最近学习中,在这两个概念上出现了混淆,导致了一些误解,在此厘清。 最大路径 在一个简单图G中,u、v之间的距离 d ( u , v ) min ⁡ { u 到 v 的最短路的长度 } d(u,v) \min \{ u到v的最短路的长度 \} d(u,v)min{u到v的最短路的…

wefaf

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度,有此需求的小伙伴学起来! 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时&#x…

【C++】:string类的基本使用

目录 引言一,string类对象的常见构造二,string类对象的容量操作三,string类对象的访问及遍历操作四,string类对象的修改操作五,string类非成员函数六,整形与字符串的转换 引言 string 就是我们常说的"…

如何对SQL Server中的敏感数据进行加密解密?

为什么需要对敏感数据进行加密? 近几年有不少关于个人数据泄露的新闻(个人数据通常包含如姓名、地址、身份证号码、财务信息等),给事发公司和被泄露人都带来了不小的影响。 许多国家和地区都出台了个人数据保护的法律法规&#…

Unity Animation--动画窗口指南(使用动画视图)

Unity Animation--动画窗口指南(使用动画视图) 使用动画视图 window -> Animation 即可打开窗口 查看GameObject上的动画 window -> Animation -> Animation 默认快捷键 Ctrl 6 动画属性列表 在下面的图像中,“动画”视图&am…

思科模拟器--2.静态路由和默认路由配置24.5.15

首先,创建三个路由器和两个个人电脑。 接着,配置两台电脑的IP,子网掩码和默认网关 对Router 0,进行以下命令: 对Router进行以下命令: 对Router2进行以下命令: 本实验完成。 验证:PC…

Vue3+ts(day06:路由)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…

【ARMv8/v9 系统寄存器 5 -- ARMv8 Cache 控制寄存器 SCTRL_EL1 使用详细介绍】

关于ARM Cache 详细学习推荐专栏: 【ARM Cache 专栏】 【ARM ACE Bus 与 Cache 专栏】 文章目录 ARMv8/v9 Cache 设置寄存器ARMv8 指令 Cache 使能函数测试代码 ARMv8/v9 Cache 设置寄存器 关于寄存器SCTRL_EL1 的详细介绍见文章:【ARMv8/v9 异常模型入…

西南大学计算机考研,选学硕还是专硕?西南大学计算机考研考情分析!

西南大学(Southwest University)是教育部直属,教育部、农业农村部、重庆市共建的重点综合大学,是国家首批"双一流"建设高校,"211工程"和"985工程优势学科创新平台"建设高校。现任党委书…

【嵌入式大赛应用赛道】机械手臂

电机 进步电机:它的转动是以确定的步数进行的,只要计算好脉冲数量和频率,就可以准确预测和控制电机的转动角度、速度以及停止的位置 伺服电机:将输入的电信号(如电压或电流指令)转换成轴上的精确旋转运动…

大模型算法(一):从Transformer到ViT再到LLaMA

单任务/单领域模型 深度学习最早的研究集中在针对单个领域或者单个任务设计相应的模型。 对于CV计算机视觉领域,最常用的模型是CNN卷积模型。其中针对计算机视觉中的不同具体任务例如分类任务,目标检测任务,图像分割任务,以CNN作…