文字识别系统代码

news/2025/11/12 20:22:27/文章来源:https://www.cnblogs.com/wyybhrqydw/p/19215299
点击查看代码
import torch
from torch import optim
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
from torchvision import datasets, transforms
from torch.utils.data import DataLoader, Dataset
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt
import os
import timedevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')#数据加载与预处理
transforms = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])
def load_data():train_dataset = datasets.MNIST(root='./data', train=True, transform=transforms, download=True)test_dataset = datasets.MNIST(root='./data', train=False, transform=transforms, download=True)batch_size = 128train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)return train_loader, test_loader, test_dataset#定义CNN模型
class MyCNN(nn.Module):def __init__(self):super(MyCNN, self).__init__()self.conv1 = nn.Conv2d(1, 16, kernel_size=3, padding=1)self.pool1 = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(16, 16, kernel_size=3, padding=1)self.pool2 = nn.MaxPool2d(2, 2)self.output = nn.Linear(16 * 7 * 7, 10)self.dropout = nn.Dropout(0.5)def forward(self, x):x = self.pool1(F.relu(self.conv1(x)))x = self.pool2(F.relu(self.conv2(x)))x = x.view(x.size(0), -1)x = self.dropout(x)output = self.output(x)return output, x#训练模型
model = MyCNN().to(device)
optimizer = optim.Adam(model.parameters(), lr=0.001)
critirion = nn.CrossEntropyLoss()def train(epochs, train_loader, optimizer, critirion):model.train()train_loss = []train_acc = []for epoch in range(epochs):start_time = time.time()running_loss = 0.0total = 0current = 0for i, (images, labels) in enumerate(train_loader):images, labels = images.to(device), labels.to(device)optimizer.zero_grad()output = model(images)[0]loss = critirion(output, labels)loss.backward()optimizer.step()running_loss += loss.item()_, predicted = torch.max(output.data, 1)total += labels.size(0)current += (predicted == labels).sum().item()epoch_loss = running_loss / len(train_loader)epoch_acc = 100 * current / totaltrain_loss.append(epoch_loss)train_acc.append(epoch_acc)end_time = time.time()print(f"Epoch [{epoch}/{epochs}], Loss: {epoch_loss:.4f}, Acc: {epoch_acc:.2f}%, Time: {end_time-start_time:.2f}s")return train_loss, train_acc#模型评估
def test(model, test_loader):model.eval()all_preds = []all_labels = []with torch.no_grad():for images, labels in test_loader:images, labels = images.to(device), labels.to(device)output = model(images)[0]_, predicted = torch.max(output.data, 1)all_preds.extend(predicted.cpu().numpy())all_labels.extend(labels.cpu().numpy())all_preds = np.array(all_preds)all_labels = np.array(all_labels)accuracy = (all_preds == all_labels).mean() * 100print(f"测试准确率: {accuracy:.2f}%")print("分类效果评估:")target_names = [str(i) for i in range(10)]report = classification_report(all_labels, all_preds, target_names=target_names)print(report)if __name__ == '__main__':print("(24信计2班 王晶莹 2024310143126)")print(f"device: {device}")train_loader, test_loader, test_dataset = load_data()epochs = 20train_loss, train_acc = train(epochs, train_loader, optimizer, critirion)test(model, test_loader)#绘制结果plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1)plt.plot(range(1, epochs+1), train_loss)plt.title("Training Loss")plt.xlabel("Epoch")plt.ylabel("Loss")plt.subplot(1, 2, 2)plt.plot(range(1, epochs+1), train_acc)plt.title("Training Accuracy")plt.xlabel("Epoch")plt.ylabel("Accuracy (%)")plt.tight_layout()plt.show()

屏幕截图 2025-11-12 201725

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

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

相关文章

B4093 [CSP-X2021 山东] 发送快递

B4093 [CSP-X2021 山东] 发送快递 题解题目传送门 我的博客 - 欢迎光临! 本题弱化版(?):P3052,P10483 二者互为双倍经验。首先对于一个强制捆绑组里的物品,我们直接使用并查集,将一个并查集里的物品合成为一个…

从零上手 Rokid JSAR:打造专属 AR 桌面交互式 3D魔方,开启空间创建之旅

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微软2025年11月补丁星期二修复1个零日漏洞和63个安全漏洞

微软2025年11月补丁星期二发布了安全更新,修复了63个安全漏洞,其中包括1个被积极利用的零日漏洞。本次更新包含4个严重级别漏洞,涉及权限提升、远程代码执行等多个安全领域。微软2025年11月补丁星期二修复1个零日漏…

CF468C Hack it!

已严肃完成今日构造大学习。 首先扔出来一个 \([1, 10^{18} - 1]\) 区间,你会发现这个区间每往右平移一个单位那么 \(f\) 的和就会加 \(1\),当然得在 \(2 \times 10^{18} - 1\) 之内,这也是我们选择这个界的原因。 …

深入解析:FT62FC3X 8位MCU单片机选型表,详细解析FT62FC31A/32A/33A/35A/3FA

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

FFmpeg for Android 图传Web

FFmpeg for Android & 图传Web 之前在项目研发中有个需求, 需要对接RTSP摄像头, 并且需要将其转封装格式到H5能够播放的格式, 并且需要在纯安卓APP中实现, 并且需要低延迟. 找了一圈都没有合适的且现成的方案, 这个…

语法记录

\(\texttt{titile}\) 计概与数算行末不要空格!!! 字符串与字符数组读入 cin >> str //字符与字符串,不含空格、制表符与换行 scanf("%c", &ch) //读单个字符 ch scanf(" %c", &…

Can Large Language Models Detect Rumors on Social Media?

论文信息论文标题:Can Large Language Models Detect Rumors on Social Media?论文作者:刘强、陶翔、吴俊飞、吴舒、王亮论文来源:发布时间:2024-02-06论文地址:link论文代码:link1 介绍 1.1 研究动机研究动机围…

压迫

从明天开始到考研结束前 拒绝三角洲 方舟想起来了挂一下,没想起来就算了 抖音不再打开 b站用来看课 每天总结反思 多学多想多思考 提高效率 瞄着最高分努力 看看实力 如果考的太高完全可以选择二战,这也是二战得信心…

P13573 [CCPC 2024 重庆站] Pico Park

P13573 [CCPC 2024 重庆站] Pico Park 题意: 游戏中,有 \(n\le 500\) 名玩家,依次站在数轴的 \(1,2,3, \dots, n\) 处,第 \(i\) 名玩家有一个面向的方向 \(d_i\),为向左或向右。 每名玩家手里有一把缩小枪,玩家会…

手工安装gcc-13.3.0

手工安装gcc-13.3.0wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bzwget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1…

深入解析:Cookie、Session、JWT、SSO,网站与 APP 登录持久化与缓存

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

gowin ide linux安装教程

1.下载,下载地址 https://www.gowinsemi.com.cn/software/index 我下载的版本是Gowin_V1.9.11.03_Education_Linux ps:云源软件和云源编程器的区别: 云源软件包含一系列工具如ide,综合工具,编程器等等 云源编程器就…

AT_arc111_f [ARC111F] Do you like query problems?

首先这个取 \(\min,\max\) 操作很不好做。 并且对可能的操作序列计数很不好做。 参考 【题解】ARC111F Do you like query problems?。 考虑先转期望,求出每种操作序列的期望结果。 发现序列中每个位置都不受其他位置…

Win7 隐藏文件夹盘符

1、打开注册表编辑器 regedit 2、找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 3、 右键新建 DWORD-32 值:名称修改为:NoDrives 十进制值按下表填写4、重启系统生效!

pythontip 按条件过滤字典

编写一个程序,根据某个条件过滤字典值。 对于这个挑战,条件是字典值应该大于整数k。 定义函数filter_dict_values(),有两个参数:字典mixed_dict和整数k。 在函数内部,创建一个新字典,并从mixed_dict过滤值不是整…

DotNetGuide 突破了 9.5K + Star,一份全面的C#/.NET/.NET Core学习、工作、面试指南知识库!

DotNetGuide 介绍 DotNetGuide是一个专注于C#/.NET/.NET Core学习、工作、面试指南的 GitHub 知识库,该知识库记录、收集和总结了C#/.NET/.NET Core基础知识、学习路线、开发实战、编程技巧练习、学习视频、文章、书籍…

如何把华为mate 60手机备份到移动硬盘

如何把mate 60备份到移动硬盘华为Mate 60可通过USB OTG连接移动硬盘进行数据备份,以下是具体操作步骤: 连接移动硬盘使用USB OTG数据线将移动硬盘连接至Mate 60的Type-C接口。 确保移动硬盘已插入电源(部分硬盘需额…

Vue实例学习

vue的学习 1.初始化渲染 第一步构建用户界面,第二步创建vue实例初始化渲染 核心步骤分为4步: 1.准备容器,假设这个容器的唯一id是app 2.引包(vue的版本),vue有两种版本开发版本/生产版本 开发版本有完整的警告和…

2.2 语言处理程序基础

2.2 语言处理程序基础2.2 语言处理程序基础以编译方式翻译C/C++源程序的过程中,类型检查在( )阶段处理。 A. 词法分析 B. 语义分析 C. 语法分析 D. 目标代码生成正确答案是 B。 解析 本题考查的是编译器工作过程。…