pytorch实现 --- 手写数字识别

        本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在Pytorch

       Pytorch(1)---pytorch实现 --- 手写数字识别》

pytorch实现 --- 手写数字识别

目录

1.项目介绍

2.实现方法

3.程序代码

4.运行结果


1.项目介绍

        使用pytorch实现手写数字识别,十分简单的小项目,环境搭建好,一跑就通。


2.实现方法

2.1方式1        

 安装库:

pip install numpy torch torchvision matplotlib

 运行:

python test.py

首次运行会下载MNIST数据集,请保持网络畅通

2.2方式2

        如果使用pycharm,已经安装好了pytorch环境,那么直接在pytorch环境中运行下面这份代码就好。


3.程序代码

"""手写数字识别项目时间:2023.11.6环境:pytorch作者:Rainbook
"""import torch
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision.datasets import MNIST
import matplotlib.pyplot as pltclass Net(torch.nn.Module):  # 定义一个Net类,神经网络的主体def __init__(self):  # 全连接层,四个super().__init__()self.fc1 = torch.nn.Linear(28*28, 64)  # 输入层输入28*28,输出64self.fc2 = torch.nn.Linear(64, 64)  # 中间层,输入64,输出64self.fc3 = torch.nn.Linear(64, 64)self.fc4 = torch.nn.Linear(64, 10)  # 中间层(隐藏层)的最后一层,输出10个特征值def forward(self, x):  # 前向传播过程# self.fc1(x)全连接线性计算,再套上一个激活函数torch.nn.functional.relu()x = torch.nn.functional.relu(self.fc1(x))x = torch.nn.functional.relu(self.fc2(x))x = torch.nn.functional.relu(self.fc3(x))# 最后一层进行softmax归一化,log_softmax是为了提高计算稳定性,在softmax后面套上了一个对数运算x = torch.nn.functional.log_softmax(self.fc4(x), dim=1)return xdef get_data_loader(is_train):to_tensor = transforms.Compose([transforms.ToTensor()])  # 定义数据转换类型tensor,多维数组(张量)"""下载MNIST数据集,"":当前位置is_train:判断是训练集还是测试集;batch_size:一个批次包含15张图片;shuffle:数据随机打乱的"""data_set = MNIST("", is_train, transform=to_tensor, download=True)return DataLoader(data_set, batch_size=15, shuffle=True)  # 数据加载器def evaluate(test_data, net):  # 用来评估神经网络n_correct = 0n_total = 0with torch.no_grad():for (x, y) in test_data:outputs = net.forward(x.view(-1, 28*28))  # 计算神经网络的预测值for i, output in enumerate(outputs):  # 对每个批次的预测值进行比较,累加正确预测的数量if torch.argmax(output) == y[i]:n_correct += 1n_total += 1return n_correct / n_total  # 返回正确率def main():# 导入训练集和测试集train_data = get_data_loader(is_train=True)test_data = get_data_loader(is_train=False)net = Net()  # 初始化神经网络# 打印初始网络的正确率,应当是10%附近。手写数字有十种结果,随机猜的正确率就是1/10print("initial accuracy:", evaluate(test_data, net))"""训练神经网络pytorch的固定写法"""optimizer = torch.optim.Adam(net.parameters(), lr=0.001)for epoch in range(5):  # 需要在一个数据集上反复训练神经网络,epoch网络轮次,提高数据集的利用率for (x, y) in train_data:net.zero_grad()  # 初始化output = net.forward(x.view(-1, 28*28))  # 正向传播# 计算差值,nll_loss对数损失函数,为了匹配log_softmax的log运算loss = torch.nn.functional.nll_loss(output, y)loss.backward()  # 反向误差传播optimizer.step()  # 优化网络参数print("epoch", epoch, "accuracy:", evaluate(test_data, net))  # 打印当前网络的正确率"""测试神经网络训练完成后,随机抽取3张图片进行测试"""for (n, (x, _)) in enumerate(test_data):if n > 3:breakpredict = torch.argmax(net.forward(x[0].view(-1, 28*28)))  # 测试结果plt.figure(n)  # 画出图像plt.imshow(x[0].view(28, 28))  # 像素大小28*28plt.title("prediction: " + str(int(predict)))  # figure的标题plt.show()if __name__ == "__main__":main()

4.运行结果

4.1正确率

4.2测试结果

        参考资料来源:B站

        文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者关注VX公众号:Rain21321,联系作者。

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

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

相关文章

Prometheus接入AlterManager配置企业微信告警(基于K8S环境部署)

文章目录 一、创建企业微信机器人二、配置AlterManager告警发送至企业微信三、Prometheus接入AlterManager配置四、部署PrometheusAlterManager(放到一个Pod中)五、测试告警 注意:请基于 PrometheusGrafana监控K8S集群(基于K8S环境部署)文章之上做本次实验。 一、创…

Sui浏览器现支持查看已验证的Move源代码

Sui浏览器现在包含了Sui框架包的源代码视图,这是一个备受欢迎的功能。这个新的“已验证源代码(Source Verified)”选项卡位于现有的“字节码(Bytecode)”选项卡旁边,使开发人员可以点击查看以下包的源代码&…

RFID技术在固定资产的应用

作为RFID系统中不可或缺的关键组件,读写器在固定资产管理中扮演着重要的角色。它利用RFID技术,能够迅速而有效地捕获、记录和跟踪资产信息,以实现更为高效和准确的资产管理。在本文中,我们将深入探讨RFID技术在固定资产管理领域的…

【广州华锐互动】VR历史古城复原:沉浸式体验古代建筑,感受千年风华!

在科技日新月异的今天,虚拟现实(VR)技术已经成为了我们生活中不可或缺的一部分。从娱乐游戏到医疗健康,从教育培训到房地产销售,VR技术的应用领域日益广泛。而近年来,VR技术在文化遗产保护和古迹复原方面的…

哈夫曼编码与解码,基于Python实现

from itertools import count from collections import Counter from heapq import heapify, heappush, heappopdef huffman_tree(s):# 统计每个字符出现的次数s Counter(s) # 计算可迭代序列中元素的数量,返回字典类型数据c…

Web自动化测试框架Selenium

什么是自动化测试 自动化测试就是,假定一些预设值,由机器自动化完成的测试。 web自动化测试,将自动化测试技术艺能用到web测试中,是假定一些预设值,由程序驱动浏览器来完成web程序的测试,如下图&#xff1…

chrome 防止http自动转https的方法

1. 左上角,单击地址栏左边 2. 然后点击网站设置 3. 不安全内容改为【允许】 4. 然后以后访问此网站时,就不会再自动跳转为https了

oracle查询数据库内全部的表名、列明、注释、数据类型、长度、精度等

Oracle查询数据库内全部的表名、列明、注释、数据类型、长度、精度 SELECT a.TABLE_NAME 表名, row_number() over(partition by a.TABLE_NAME order by a.COLUMN_NAME desc) 字段顺序,a.COLUMN_NAME 列名, b.COMMENTS 注释,a.DATA_TYPE 数据类型, a.DATA_LENGTH 长度,DATA_SC…

C语言编写学生成绩管理系统-要求有增删改查(C语言基础题-8道)

文章目录 1-5题题目例题8(难度★ ★ ★ ★ ☆) 答案例题8答案1解析 答案2解析 1-5题 C语言基础例题1-3题-指针篇 C语言基础例题4-5题-二维数组篇 C语言基础例题6-7题-结构体篇 题目 例题8(难度★ ★ ★ ★ ☆) 编写一个学生成…

二、Hadoop分布式系统基础架构

1、分布式 分布式体系中,会存在众多服务器,会造成混乱等情况。那如何让众多服务器一起工作,高效且不出现问题呢? 2、调度 (1)架构 在大数据体系中,分布式的调度主要有2类架构模式&#xff1a…

使用Selenium Grid远程执行测试

我们将在同一台工作电脑上,分别启动主控(Hub)和节点(Node)2个Selenium Grid服务,IP地址均使用环回地址127.0.0.1,端口分别为4444和5555。开始以下操作前,请确认你的机器上已经安装、…

【MySQL基本功系列】第一篇 先熟悉MySQL的运行逻辑

​ 我将推出一系列关于MySQL的博客文章,涵盖了从入门到深入底层的原理。这些文章将包括MySQL的运行逻辑、InnoDB存储引擎、SQL优化、undo log、bin log等多个方面的知识。希望这些文章能为你提供宝贵的信息和洞见,并帮助你更好地理解和应用MySQL。同时&a…

打造高效运营底座,极智嘉一体化软件系统彰显科技威能

在仓储成本和物流需求日益增加的今天,创新且高效的物流机器人解决方案能够显著提升物流运营效率,降低物流成本,实现智能化、精益化、一体化的物流管理。全球仓储机器人引领者极智嘉(Geek)以「一套系统,天生全能」为准则&#xff0…

阿里巴巴1688商品详情 API 接口示例

1688.item_get 公共参数 请求地址: https://o0b.cn/anzexi 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_…

Windows ObjectType Hook 之 ParseProcedure

1、背景 Object Type Hook 是基于 Object Type的一种深入的 Hook,比起常用的 SSDT Hook 更为深入。 有关 Object Type 的分析见文章 《Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析》。 这里进行的 Hook 为 其中之一的 ParseProcedure。文章实…

7.spark sql编程

概述 spark 版本为 3.2.4,注意 RDD 转 DataFrame 的代码出现的问题及解决方案 本文目标如下: RDD ,Datasets,DataFrames 之间的区别入门 SparkSession创建 DataFramesDataFrame 操作编程方式运行 sql 查询创建 DatasetsDataFrames 与 RDDs 互相转换 使用…

创建基于多任务的并发服务器

有几个请求服务的客户端&#xff0c;我们就创建几个子进程。 这个过程有以下三个阶段&#xff1a; 这里父进程传递的套接字文件描述符&#xff0c;实际上不需要传递&#xff0c;因为子进程会复制父进程拥有的所有资源。 #include <stdio.h> #include <stdlib.h>…

如何再kali中下载iwebsec靶场

这个靶场有三种搭建方法&#xff1a; 第一种是在线靶场&#xff1a;http://www.iwebsec.com:81/ 第二种是虚拟机版本的&#xff0c;直接下载到本地搭建 官网地址下载&#xff1a;http://www.iwebsec.com/ 而第三种就是利用docker搭建这个靶场&#xff0c;我这里是用kali进行…

window10 定时任务

window10 定时任务 1、背景2、目标3、思路4、实操4.1、设置定时任务4.2、配置策略4.3、验证 1、背景 项目上由于业务调试需要&#xff0c;开具了一台window10系统&#xff0c;此台window10为项目组公共使用&#xff0c;为防止误操作分配了不通的账号&#xff0c;日常使用各自账…

学习视频剪辑:巧妙运用中画、底画,制作画中画,提升视频效果

随着数字媒体的普及&#xff0c;视频剪辑已经成为一项重要的技能。在视频剪辑过程中&#xff0c;制作画中画可以显著提升视频效果、信息传达和吸引力。本文讲解云炫AI智剪如何巧妙运用中画、底画批量制作画中画来提升视频剪辑水平&#xff0c;提高剪辑效率。 操作1、先执行云…