汉字

import os
import numpy as np
import pandas as pd
from PIL import Image
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

---------------------- 1. 配置参数 ----------------------

数据集路径(需替换为你的CASIA-HWDB图像文件夹路径)

DATA_ROOT = "path/to/your/casia_hwdb_images"

汉字标签文件(需包含image_name与label的映射,格式:文件名,汉字)

LABEL_FILE = "path/to/your/labels.csv"

训练参数

BATCH_SIZE = 64
EPOCHS = 20
LEARNING_RATE = 1e-3
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
NUM_CLASSES = 3755 # CASIA-HWDB常用汉字数量

---------------------- 2. 自定义数据集类 ----------------------

class ChineseHandwritingDataset(Dataset):
def init(self, data_root, label_file, transform=None):
self.data_root = data_root
self.labels = pd.read_csv(label_file)
# 汉字到索引的映射(将汉字转为模型可识别的数字)
self.char_to_idx = {char: i for i, char in enumerate(self.labels["label"].unique())}
self.transform = transform

def __len__(self):return len(self.labels)def __getitem__(self, idx):# 读取图像img_name = self.labels.iloc[idx]["image_name"]img_path = os.path.join(self.data_root, img_name)image = Image.open(img_path).convert("L")  # 转为灰度图(单通道)# 读取标签并转为数字label_char = self.labels.iloc[idx]["label"]label = self.char_to_idx[label_char]# 图像预处理if self.transform:image = self.transform(image)return image, label

---------------------- 3. 定义CNN模型(轻量级) ----------------------

class HandwritingCNN(nn.Module):
def init(self, num_classes=NUM_CLASSES):
super(HandwritingCNN, self).init()
# 卷积层:提取图像特征
self.conv_layers = nn.Sequential(
nn.Conv2d(1, 32, kernel_size=3, padding=1), # 输入1通道,输出32通道
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2), # 下采样:尺寸减半

        nn.Conv2d(32, 64, kernel_size=3, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),nn.Conv2d(64, 128, kernel_size=3, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2))# 全连接层:分类self.fc_layers = nn.Sequential(nn.Flatten(),  # 展平卷积输出(需根据输入图像尺寸调整后续维度)nn.Linear(128 * 16 * 16, 1024),  # 假设输入图像为128x128,经3次下采样后为16x16nn.ReLU(),nn.Dropout(0.5),  # 防止过拟合nn.Linear(1024, num_classes))def forward(self, x):x = self.conv_layers(x)x = self.fc_layers(x)return x

---------------------- 4. 数据加载与预处理 ----------------------

图像预处理:统一尺寸、转为Tensor、标准化

transform = transforms.Compose([
transforms.Resize((128, 128)), # 统一图像尺寸为128x128
transforms.ToTensor(), # 转为Tensor(维度:C×H×W)
transforms.Normalize(mean=[0.5], std=[0.5]) # 灰度图标准化(单通道均值/标准差)
])

加载数据集(此处简化为单数据集,实际需拆分train/val)

dataset = ChineseHandwritingDataset(
data_root=DATA_ROOT,
label_file=LABEL_FILE,
transform=transform
)

拆分训练集与验证集(8:2)

train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = torch.utils.data.random_split(dataset, [train_size, val_size])

数据加载器(批量读取+打乱)

train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=False)

---------------------- 5. 模型训练与验证 ----------------------

def train_model():
# 初始化模型、损失函数、优化器
model = HandwritingCNN(num_classes=NUM_CLASSES).to(DEVICE)
criterion = nn.CrossEntropyLoss() # 分类任务常用损失
optimizer = optim.AdamW(model.parameters(), lr=LEARNING_RATE, weight_decay=1e-4) # 带权重衰减的Adam

# 训练循环
for epoch in range(EPOCHS):model.train()  # 训练模式(启用Dropout)train_loss = 0.0train_correct = 0# 训练批次for images, labels in train_loader:images, labels = images.to(DEVICE), labels.to(DEVICE)# 前向传播outputs = model(images)loss = criterion(outputs, labels)# 反向传播+优化optimizer.zero_grad()  # 清空梯度loss.backward()  # 计算梯度optimizer.step()  # 更新参数# 统计训练损失与准确率train_loss += loss.item() * images.size(0)_, preds = torch.max(outputs, 1)  # 获取预测结果(概率最大的类别)train_correct += torch.sum(preds == labels.data)# 计算训练集平均损失与准确率train_loss = train_loss / len(train_loader.dataset)train_acc = train_correct.double() / len(train_loader.dataset)# 验证模型model.eval()  # 验证模式(关闭Dropout)val_loss = 0.0val_correct = 0with torch.no_grad():  # 禁用梯度计算(节省内存)for images, labels in val_loader:images, labels = images.to(DEVICE), labels.to(DEVICE)outputs = model(images)loss = criterion(outputs, labels)val_loss += loss.item() * images.size(0)_, preds = torch.max(outputs, 1)val_correct += torch.sum(preds == labels.data)val_loss = val_loss / len(val_loader.dataset)val_acc = val_correct.double() / len(val_loader.dataset)# 打印每轮结果print(f"Epoch [{epoch+1}/{EPOCHS}]")print(f"Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.4f}")print(f"Val Loss: {val_loss:.4f}, Val Acc: {val_acc:.4f}\n")# 保存训练好的模型
torch.save(model.state_dict(), "chinese_handwriting_model.pth")
print("模型已保存为:chinese_handwriting_model.pth")

---------------------- 6. 启动训练 ----------------------

if name == "main":
train_model()

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

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

相关文章

专业手机管理指南:使用Syncios移动管理器简化数据传输与备份

本文介绍Syncios移动管理器这款专业跨平台解决方案,能够帮助用户通过简单操作实现手机数据备份、恢复和跨设备传输,支持选择性数据管理,保障隐私安全,是手机数据管理的理想工具。像专业人士一样管理手机:使用Sync…

Russian Per GDP

So you are comparing the GDP of a zero-welfare society(USA) with a full-welfare society. A smart Russian just earn in the West but share the welfare of RF. ALSO, theres semi-welfare society.

2025年11月智能AI客服品牌推荐:综合实力排名榜

“双十一”后的客服高峰、年底会员续费潮、春节前的咨询井喷,企业客服中心在2025年第四季度普遍面临三大压力:人力缺口放大、咨询量峰值不可预测、客户对响应速度的容忍度继续下降。中国信通院《2025中国呼叫中心产业…

83windows 安装git 及git-lfs

# 1.安装 # 管理员进入PowerShell winget install Git.Git winget install GitHub.GitLFS# 验证安装是否成功 git --version git lfs version

近期小细节总结

串口并发调用 单个串口通讯(Modbus RTU也算),业务流程中的串口调用,既有定时轮询又有依次发送,也就是涉及到并发调用通讯的,不要犹豫,为通讯管理模块建立消息队列不用纠结锁的问题,天然线程安全定时任务和手动…

pytorch汉字识别

import os import random import numpy as np import matplotlib.pyplot as plt from PIL import Image, ImageDraw, ImageFont import torch import torch.nn as nn import torch.optim as optim from torch.utils.da…

2025年泵站闸门定制厂家权威推荐榜单:截流闸门/分流井闸门/截流井污水闸门源头厂家精选

在水利工程与市政排水系统中,泵站闸门作为控制水流、保障设施安全的关键设备,其质量与性能直接关系到整个系统的运行效率。 在水利工程、市政给排水、污水处理等领域,泵站闸门扮演着不可或缺的角色。据行业数据显示…

2025年石墨增碳剂搅拌机源头厂家权威推荐:塑料粉混合机/厚型防火涂料搅拌机混合机/灌浆料搅拌机设备厂商精选

石墨增碳剂搅拌机作为现代工业生产的核心混合设备,凭借其高效的混合能力、稳定的运行性能和广泛的适用性,在干粉砂浆、保温材料、真石漆、腻子粉等领域发挥着不可替代的作用。本文将基于2025年行业数据,深入分析石墨…

深入理解浮点数格式:FP32、BF16、FP16与FP8的技术对比 - 详解

深入理解浮点数格式:FP32、BF16、FP16与FP8的技术对比 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

2025年粉末涂料最新权威排行榜TOP10,行业新启航

在环保政策与工业升级的双轮驱动下,粉末涂料以其零VOC排放、高利用率和卓越性能,正成为涂装市场的绿色首选。 随着国家“双碳”政策的深入推进和制造业转型升级的加速,2025年中国粉末涂料行业迎来了新的发展契机。粉…

2025年11月小学生学习机品牌推荐:五强口碑榜与选购指南

孩子刚上一年级,作业辅导成了全家“战场”:拼音读不准、口算总出错,家长一吼孩子就哭,老人想帮却不懂新教材。这是不少家庭正在经历的日常。教育部《2024全国义务教育质量监测报告》显示,小学低年级学生每天课外学…

详细介绍:Java 数学类详解:Math 类常用方法(abs/sqrt/random 等)一篇掌握

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

Ubuntu环境下删除Docker镜像与容器、配置静态IP地址

在Ubuntu环境下管理Docker镜像和容器,以及配置静态IP地址,是日常服务器管理的常见任务。 删除Docker镜像与容器 删除容器: 要删除特定的Docker容器,首先需要停止该容器: docker stop <container_id_or_name>…

2025 年管线管公司最新推荐排行榜:权威测评发布,揭秘行业前五强综合实力及选购指南L245N 管线管/L360N 管线管/L415N 管线管公司推荐

引言 在工业经济持续发展的背景下,管线管作为能源输送、石油化工、城市建设等领域的核心基础材料,市场需求持续攀升,但行业内产品质量参差、服务能力失衡等问题仍较为突出。为破解采购端选择难题,塑料管道协会联合…

2025年11月学习机品牌对比榜:从早教到高中全场景机型盘点

期中刚过,家长群里最热闹的话题就是“要不要买学习机”。试卷发下来,有人欢喜有人愁,欢喜的那拨已经把学习机当成“第二老师”,愁的那拨还在纠结“到底买哪台”。教育部“双减”之后,校内作业量下降,家庭学习权重…

2025年湖南房屋鉴定公司权威推荐榜单:湖南房屋鉴定报告/湖南房屋鉴定机构/湖南房屋安全检测服务机构精选

房屋安全鉴定作为建筑工程领域的重要环节,凭借其专业的技术要求、严谨的评估标准和全面的安全保障,在老旧小区改造、公共建筑安全、灾后应急评估、工业建筑检测等领域发挥着至关重要的作用。本文将基于行业标准与技术…

2025 年合金管公司最新推荐榜权威发布:12Cr1MoVG/15CrMoG/P22 合金管优质企业榜单及选择指南

引言 当前合金管市场需求持续攀升,但产品质量合格率仅为 78%,采购方因信息不对称导致的选型失误率达 32%。为破解行业痛点,行业协会联合检测机构开展 2025 年度合金管企业测评,覆盖 120 余家企业,最终形成最新推荐…

2025年发电电焊机工厂权威推荐:柴油焊机/汽油焊机/柴油发电电焊机源头厂家精选

发电电焊机作为现代工业施工与应急作业的核心装备,凭借其高效集成特性、稳定输出性能和强大适应能力,在建筑施工、管道工程、应急维修、野外作业等领域发挥着不可替代的作用。本文将基于2025年行业数据与技术标准,为…

【AI元人文:构建“舆情反射与模拟沙盘”机制(合二篇)】

AI元人文:构建“舆情反射与模拟沙盘”机制——从价值混沌到共识可期的文明导航系统 在AI元人文的构想中,培育健全的价值主体是根基,而促成主体间在复杂社会中达成智慧共识是目标。然而,若缺乏对社会整体价值脉动的…

2025 年电线电缆实力厂家最新推荐榜单:结合协会测评权威数据,精选优质企业赋能工程与民生采购阻燃 / 耐火 / 屏蔽 / 低烟 / 电子和网络电缆电线推荐

引言 电线电缆作为工业生产与民生建设的核心载体,其质量与性能至关重要。据中国电线电缆行业协会 2025 年最新测评数据显示,当前行业内仅 38% 的企业产品在导电性能、绝缘强度等关键指标上完全达标,部分小型厂家因不…