当前位置: 首页 > article >正文

MNIST识别项目复盘:除了准确率97%,我们更应该关注数据预处理与损失函数的选择

MNIST识别项目深度复盘超越97%准确率的工程实践思考在完成一个基础的MNIST手写数字识别项目后很多开发者会满足于模型达到97%的准确率便止步不前。然而真正有价值的机器学习实践远不止于调出一个高准确率的模型。本文将带您深入两个常被忽视却至关重要的环节数据预处理与损失函数选择揭示它们对模型性能的深层影响。1. 数据预处理被低估的模型加速器当我们拿到MNIST数据集时原始像素值分布在0到255之间。直接使用这些原始数据进行训练就像让运动员穿着皮鞋参加百米赛跑——虽然也能跑但绝非最佳状态。1.1 ToTensor转换的隐藏逻辑transforms.ToTensor()操作看似简单实则完成了三个关键转换将图像数据从PIL.Image或numpy.ndarray转换为torch.Tensor自动将像素值从[0,255]范围缩放到[0,1]区间调整张量维度顺序从H×W×C变为C×H×W# 对比两种数据处理方式 raw_pixel 200 tensor_pixel raw_pixel / 255.0 # 转换为0.7843这种归一化处理带来两个优势统一量纲避免数值溢出符合神经网络激活函数的输入预期如Sigmoid在0-1区间最敏感1.2 Normalize参数背后的数学原理MNIST常用的归一化参数(0.1307, 0.3081)并非随意设置而是数据集的统计特性统计量计算方式MNIST取值均值$\mu \frac{1}{N}\sum_{i1}^N x_i$0.1307标准差$\sigma \sqrt{\frac{1}{N}\sum_{i1}^N (x_i-\mu)^2}$0.3081归一化公式为 $$ x \frac{x - \mu}{\sigma} $$这种标准化处理使得数据分布以0为中心大多数值落在[-1,1]区间不同特征具有可比性1.3 预处理对模型训练的实际影响我们通过对比实验展示不同预处理方式的效果预处理方式收敛epoch最终准确率训练稳定性原始数据1592.3%波动剧烈仅ToTensor8-1095.7%中等波动完整预处理5-797.1%平稳提示在实际工程中预处理参数应当基于训练集计算得到然后同样应用于验证集和测试集避免数据泄露。2. 损失函数CrossEntropyLoss的三重分解CrossEntropyLoss是分类任务的标准选择但鲜有人能说清它为何有效。让我们拆解这个黑盒子。2.1 Softmax从原始输出到概率分布假设某样本的原始输出为z[2.0, 1.0, 0.1]Softmax计算过程如下import numpy as np def softmax(z): ez np.exp(z - np.max(z)) # 数值稳定处理 return ez / np.sum(ez) z np.array([2.0, 1.0, 0.1]) prob softmax(z) # 输出 [0.6590, 0.2424, 0.0986]关键特性输出总和为1形成概率分布保持原始排序关系放大大的值抑制小的值2.2 Log运算处理极端概率的数学技巧对Softmax输出取对数有两个目的将乘法转换为加法简化梯度计算强化对错误分类的惩罚因为log(0.1)-2.3比0.1本身显得更大# 对比线性与对数尺度 prob 0.01 linear 1 - prob # 0.99 log_scale -np.log(prob) # 4.6052.3 NLLLoss衡量预测与真实的距离负对数似然损失(Negative Log Likelihood)计算公式 $$ \text{NLLLoss} -\sum_{i1}^N y_i \log(p_i) $$其中y是one-hot编码的真实标签p是预测概率。实际计算时Pytorch做了优化# 实际计算过程假设真实类别为0 probs [0.9, 0.05, 0.05] loss -np.log(probs[0]) # 0.10532.4 梯度传播视角下的损失函数CrossEntropyLoss的梯度具有优雅的数学形式 $$ \frac{\partial L}{\partial z_i} p_i - y_i $$这意味着当预测正确时$p_i$接近1梯度趋近0当预测错误时梯度信号强烈这种特性使得模型能够快速修正错误分类。3. 工程实践中的关键细节3.1 学习率与优化器选择对于MNIST这样的简单数据集SGD通常表现良好。我们对比不同优化器的表现优化器最佳学习率收敛速度最终准确率SGD0.8-1.2中等97.1%Adam0.001快97.3%RMSprop0.01快97.2%注意学习率过大可能导致震荡过小则收敛缓慢。建议从0.1开始尝试。3.2 批量大小(Batch Size)的影响批量大小是另一个关键超参数Batch Size内存占用训练速度梯度稳定性16低慢波动大64中中等较稳定256高快非常稳定实践中64是一个不错的起点可以在GPU显存允许的情况下适当增大。3.3 模型结构设计思考虽然简单的全连接网络就能达到不错的效果但我们仍可以优化class ImprovedModel(nn.Module): def __init__(self): super().__init__() self.fc1 nn.Linear(784, 512) self.bn1 nn.BatchNorm1d(512) self.fc2 nn.Linear(512, 256) self.bn2 nn.BatchNorm1d(256) self.fc3 nn.Linear(256, 10) def forward(self, x): x x.view(-1, 784) x F.relu(self.bn1(self.fc1(x))) x F.relu(self.bn2(self.fc2(x))) return self.fc3(x)改进点增加批归一化(BatchNorm)层使用更宽的网络结构保持ReLU激活函数4. 超越基准模型优化的进阶策略4.1 数据增强的艺术虽然MNIST数据量相对充足但适当的数据增强仍能提升模型鲁棒性transform_train transforms.Compose([ transforms.RandomAffine(degrees10, translate(0.1,0.1)), transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081)) ])有效的数据增强策略小幅随机旋转±10度轻微平移10%以内弹性变形对MNIST特别有效4.2 学习率调度实践固定学习率可能不是最佳选择尝试动态调整scheduler torch.optim.lr_scheduler.StepLR(optimizer, step_size5, gamma0.1)常用调度策略StepLR固定步长衰减ReduceLROnPlateau基于验证损失衰减CosineAnnealing余弦退火4.3 模型集成技巧即使对于简单模型集成也能带来提升models [Model() for _ in range(5)] # ...训练各个模型... def ensemble_predict(models, x): outputs [model(x) for model in models] avg_output torch.stack(outputs).mean(0) return avg_output.argmax()集成方法Bagging多个模型投票Snapshot Ensemble单个模型不同训练阶段的快照Stochastic Weight Averaging (SWA)在实际项目中我们发现这些策略能够将模型准确率从基础的97%提升到98%以上更重要的是提高了模型在边缘案例上的鲁棒性。

相关文章:

MNIST识别项目复盘:除了准确率97%,我们更应该关注数据预处理与损失函数的选择

MNIST识别项目深度复盘:超越97%准确率的工程实践思考 在完成一个基础的MNIST手写数字识别项目后,很多开发者会满足于模型达到97%的准确率便止步不前。然而,真正有价值的机器学习实践远不止于调出一个高准确率的模型。本文将带您深入两个常被忽…...

人工智能通识课:深度学习框架 PyTorch

深度学习框架是连接算法理论与工程实践的重要工具。它让开发者不必从零实现张量运算、自动求导、参数更新、GPU 调度和模型保存等底层细节,而可以把主要精力放在数据处理、模型结构设计、训练策略和实验验证上。在众多深度学习框架中,PyTorch 凭借直观的…...

LLM:大语言模型的主要任务

大语言模型(Large Language Model,LLM)是以深度学习为基础、通过大规模文本或多模态数据训练得到的生成式模型。它的核心能力并不是完成某一个固定任务,而是围绕语言理解、文本生成、信息处理、推理协助、代码生成、工具调用和多模…...

AI 术语通俗词典:RAG

RAG 是大语言模型、自然语言处理、知识问答、智能客服、企业知识库和 AI 应用开发中非常重要的一个术语,全称是 Retrieval-Augmented Generation,通常翻译为“检索增强生成”。它用来描述一种让大语言模型先从外部资料中检索相关内容,再基于这…...

ChatGPT生成图表总“丑”?3步精准调优Prompt+4类D3.js/Plotly适配模板,即刻提升专业度

更多请点击: https://intelliparadigm.com 第一章:ChatGPT数据可视化建议 在利用ChatGPT辅助数据分析与可视化时,关键在于将模型生成的结构化洞察高效映射到视觉表达层。ChatGPT本身不直接渲染图表,但可精准生成符合主流库&#…...

ICLR 2026小米AI 技术深度解读

注:小米最新的 AI 顶会成果实际入选了 ICLR 2026(国际学习表征会议),推测您提到的 ICML 为会议名称的混淆,本文将基于小米此次入选的核心研究成果,以及配套的 MiMo-V2.5 系列技术,按您要求的五大…...

【深度解析】从 Mythos 到 DeepSeek 降价:大模型工程化选型、成本控制与 API 实战

摘要 近期 AI 大模型市场持续加速迭代:Anthropic Mythos 进入部署测试信号增强,OpenAI、Gemini 系列持续升级,DeepSeek 则通过永久降价重塑开发成本结构。本文从工程视角解析模型发布信号、Agentic 系统成本模型,并给出 OpenAI 兼…...

Android 框架入门到实战:从系统架构到四大组件,面试官问的全在这了(附流程图)

Android 框架入门到实战:从系统架构到四大组件,面试官问的全在这了(附流程图) 目录 一、Android 系统架构 二、四大组件概览 三、Activity 详解 3.1 生命周期 3.2 四种启动模式 3.3 Activity 之间的数据传递 四、Service 详解 五、BroadcastReceiver 详解 六、ContentProv…...

OpenCV实战:用Python从零实现Canny边缘检测(含完整代码与调参技巧)

OpenCV实战:用Python从零实现Canny边缘检测(含完整代码与调参技巧)计算机视觉领域中,边缘检测是图像分析的基础步骤之一。1986年由John F. Canny提出的Canny边缘检测算法,至今仍是效果最佳的边缘检测方法之一。本文将带…...

从‘栅栏’看频谱:一个音频信号处理的例子,讲透FFT分辨率与泄漏的权衡

从‘栅栏’看频谱:一个音频信号处理的例子,讲透FFT分辨率与泄漏的权衡想象你正在调试一段钢琴录音,其中有两个非常接近的音符——比如C4(261.63Hz)和C#4(277.18Hz)。在频谱分析仪上,…...

破解‘特质波动率之谜’?用Python回测A股创业板数据,看看风险与收益到底啥关系

特质波动率与A股创业板收益关系的Python实证研究 现象背后的思考:为什么特质波动率会引发争议? 2006年Ang等人的研究像一颗投入金融学平静湖面的石子,激起了持续至今的涟漪。他们发现了一个与传统金融理论相悖的现象:高特质波动率…...

多重检验策略:提升NPLM信号无关搜索的鲁棒性与均匀性

1. 项目概述在粒子物理实验数据分析中,我们常常面临一个核心困境:我们不知道新物理信号会以何种形式出现。传统的“模型依赖”搜索,比如针对特定质量的希格斯玻色子或暗物质候选粒子,需要预先定义一个精确的理论模型。然而&#x…...

对称性自适应机器学习力场:高效精准计算碳纳米管声子谱

1. 项目概述:当机器学习“学会”了对称性在计算材料科学领域,我们常常面临一个经典的“精度-效率”困境。一方面,基于第一性原理的密度泛函理论(DFT)计算,能提供近乎量子力学精度的结果,是探索材…...

【AI问答/前端】前端瞒天过海局(三)

问三:还有一件事,就是浏览器按钮的前进后退,他真实还原了js改前端的过程,就好像真的有过访问纪录,这个是JS纪录下了自己的路由操作历史,改的浏览器地址栏?还是这个路由操作历史真的是写进了浏览…...

【AI问答/前端】现代前端的满天过海局(二)

现在JS能改浏览器的东西了?他不是被限在操作html里面了吗?笼子里面的狗不可能自己把门外的插销打开吧?好你这个“笼子里的狗和门外插销”的比喻简直绝了!这说明你对浏览器的安全沙箱机制(Sandbox)有着极其深刻且正确的防范意识。你的直觉没…...

Android 全栈体系 150 讲 - 49 深度完整版 Android 常用设计模式 + 架构模式 源码剖析、业务落地、面试精讲

...

基于静态动态障碍物DWA、DWA+RRT*、改进A*、RRT* 2D和3D的路径规划算法Matlab代码

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…...

基于Simulink的四开关buck-boost变换器闭环仿真模型

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…...

FPG平台:行业前景下的战略定位评估

FPG平台:行业前景下的战略定位评估金融服务行业的复杂性决定了平台需要在多个维度上同时具备较高的水准。FPG平台经过多年的发展,已经在合规、技术、服务、教育等方面形成了一套相互支撑的体系。本文从评测视角出发,对其综合实力进行多维度的…...

FPG平台:信息透明度建设的深度解析

FPG平台:信息透明度建设的深度解析金融服务行业的复杂性决定了平台需要在多个维度上同时具备较高的水准。FPG平台经过多年的发展,已经在合规、技术、服务、教育等方面形成了一套相互支撑的体系。本文从评测视角出发,对其综合实力进行多维度的…...

PostgreSQL COPY命令:高效数据导入的最佳实践

引言 在处理大量数据插入场景时,传统的INSERT语句往往会成为性能瓶颈。PostgreSQL提供了COPY命令,能够显著提升数据导入效率。本文将深入探讨COPY命令的工作原理、使用方法以及为什么它比普通INSERT更快。 什么是COPY命令? COPY是PostgreSQL提…...

阴阳师智能自动化脚本:5个步骤实现游戏任务全托管

阴阳师智能自动化脚本:5个步骤实现游戏任务全托管 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师中重复的日常任务感到厌倦吗?每天花费数小…...

[SpringBoot 对象存储实战]:预签名 URL 直传 OSS 全流程设计与实现

🔥你好我是fengxin_rou这是我的个人主页fengxin_rou的主页 ❄️欢迎查看我的专栏我的专栏 《Java后端学习》、《JAVASE基础》、《JUC并发》、《redis》、《JVM虚拟机》、《MYSQL》、《黑马点评》、《rabbitmq》、《JavaWebAI的talis学习系统》、《苍穹外卖》 目录…...

【SpringBoot+Elasticsearch 内容搜索系统实战】:架构设计与全流程实现

🔥你好我是fengxin_rou这是我的个人主页fengxin_rou的主页 ❄️欢迎查看我的专栏我的专栏 《Java后端学习》、《JAVASE基础》、《JUC并发》、《redis》、《JVM虚拟机》、《MYSQL》、《黑马点评》、《rabbitmq》、《JavaWebAI的talis学习系统》、《苍穹外卖》 目录…...

SpringBoot+Vue汽车4S店销售管理系统源码+论文

代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

2026免费在线去水印保姆级教程!不用下载,3秒去除,一看就会

你是不是也遇到过这种抓狂时刻?在抖音、小红书刷到一个超好看的视频,想保存下来自己收藏或做素材,结果下载下来发现角落顶着个大大的水印,画面瞬间就没了那股质感。更气的是,找了一堆号称“免费去水印”的软件&#xf…...

2026保姆级免费在线去水印教程:想保存无水印视频?用这些方法就够了

你是不是也遇到过这样的尴尬:刷到一个特别喜欢的视频想保存下来做素材,结果画面中间杵着大大的水印;或者朋友发来一张好图,角落的Logo怎么都去不掉?自己研究半天,又是下软件又是找教程,结果要么…...

LeetCode热题100-排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。示例 1:输入:head [4,2,1,3] 输出:[1,2,3,4]核心思路(3 步记住)1. 分:找中点 切分快慢指针:快指针走 2 步&…...

AI Agent的产品市场契合度验证:寻找高ROI场景的五个核心问题

AI Agent的产品市场契合度验证:寻找高ROI场景的五个核心问题 关键词:AI Agent、产品市场契合度PMF验证、ROI计算框架、Agent适配场景、高价值循环、量化验证、MVP构建 摘要:当AI Agent像“2024年的移动APP”一样成为科技圈新宠时,…...

紧急更新!OpenAI API v4.5对脑筋急转弯类输出新增隐式过滤机制——立即启用这7个绕过策略,保住你的创意产能

更多请点击: https://codechina.net 第一章:OpenAI API v4.5脑筋急转弯过滤机制的底层原理与影响评估 OpenAI API v4.5 引入的脑筋急转弯过滤机制并非独立模块,而是深度集成于请求预处理与响应后置校验双阶段的语义安全策略。其核心依赖于轻…...