【深度学习项目实战·13】服装图像分类:在相同条件下比较MLP与CNN

发布时间:2026/11/6 8:49:48

【深度学习项目实战·13】服装图像分类:在相同条件下比较MLP与CNN 文章目录01 本篇要解决什么问题02 背景同样是28×28分类难点已经改变03 实操设计一个有边界的比较实验1先下载沿用固定划分2MLP先把图像展平成向量3CNN保留二维邻域信息4控制能控制的条件5比较指标同时查看错误样本6从小规模检查过渡到完整比较04 一个具体例子一条命令训练两个模型05 常见问题与自测06 本篇回顾与下一步01 本篇要解决什么问题跑通MNIST以后很容易想试试更大的模型。但一个模型的准确率比另一个高究竟是结构带来的还是训练轮数、样本划分或数据增强不同本篇使用Fashion-MNIST让一个MLP和一个小CNN完成同一任务。除了训练还要把“怎样比较”这件事做清楚。本篇关键词Fashion-MNIST、MLP、CNN、公平比较、错分分析。完成标志用同一份划分训练两个模型分别保存权重和结果形成可复查的比较。运行约定保留完整examples目录命令从练习根目录执行依赖沿用第12篇。02 背景同样是28×28分类难点已经改变Fashion-MNIST包含60000张训练图和10000张测试图每张为28×28灰度图共10类服装。发布方提供文件、校验和及类别说明见Fashion-MNIST作者仓库。类别包括T恤、裤子、套头衫、连衣裙、外套、凉鞋、衬衫、运动鞋、包和短靴。低分辨率下某些服装轮廓接近单靠“整体像一个形状”可能不够。这里可以沿用数字识别的数据流程但不能沿用数字类别的解释。项目必须把真实的类别映射随权重一起保存。03 实操设计一个有边界的比较实验1先下载沿用固定划分python examples/download_data.py--dataset fashion--datadata代码使用发布方GitHub数据文件作为优先镜像并保留作者原始下载站作为备用仍检查原始文件校验和。官方训练部分按类别划为约54000训练、6000验证官方10000测试保留。两个模型共用同一份索引如果缩小数据规模也共用同一份子集。2MLP先把图像展平成向量下面的模型把784个像素当作输入特征经过一个128维隐藏层再输出10个类别分数。fromtorchimportnnclassFashionMLP(nn.Module):def__init__(self):super().__init__()self.layersnn.Sequential(nn.Flatten(),nn.Linear(28*28,128),nn.ReLU(),nn.Linear(128,10))defforward(self,x):returnself.layers(x)它有101770个参数计算直接适合作为起点。但展平之后网络没有显式采用卷积中的局部连接与权重共享机制。3CNN保留二维邻域信息CNN使用第12篇的GrayCNN(classes10)两次卷积与池化后接分类头。它在不同位置重复使用卷积核有机会利用局部边缘和纹理。本版CNN有114314个参数与MLP处于相近量级但并不完全相同。因此这个实验是两个具体配置的比较不能解释成“只改变一种因素、其余完全相等”的严格结构消融。卷积带来的先验也不代表任何设置下都必然更好。训练是否充分、优化器是否合适、样本规模多大都可能改变结论。4控制能控制的条件条件本篇约定数据划分、使用数量两个模型完全相同预处理灰度浮点、统一缩放与标准化随机增强两个模型均不使用优化器Adam相同初始学习率batch size与轮数使用同一组参数批次顺序每个模型重新设置同一数据加载随机种子最优权重各自按验证损失最小选择模型初始化使用相同种子方便重复实验但不同结构不会因此得到一一对应的相同初始权重。这里先做一次可复查的比较如果要形成更可靠结论还应在多个种子下报告均值与波动。5比较指标同时查看错误样本总体准确率适合快速观察但建议同时看macro-F1和逐类召回率。某个类别预测困难时混淆矩阵能帮助定位它通常被分成哪一类。不要预先认定某几类一定混淆。先从本次的predictions.csv和错分图中找到证据再回看这些类别的轮廓、局部纹理和遮挡情况。不同模型的计算成本也值得记录。本篇输出参数量与本次总耗时总耗时包含评价和文件输出不能直接当作纯推理延迟。需要比较部署速度时应另做同设备、同批次和统一预热的测量。6从小规模检查过渡到完整比较python examples/compare_fashion.py--epochs 1--limit-train1024--limit-val256--limit-test256正式使用完整划分时python examples/compare_fashion.py--epochs 5--output artifacts/13_fashion_full一轮小样本结果主要确认两个流程都正常不能据此给出结构优劣的普遍结论。即使固定轮数相同两个模型也未必都已充分收敛应结合训练与验证曲线解释。图本篇原创比较设计图列出两个模型共享与不同的部分。04 一个具体例子一条命令训练两个模型主入口是examples/compare_fashion.py。数据只加载和划分一次再分别创建模型、重置训练随机状态并保存到独立子目录。Chapter 13: compare two models using identical splits and training budgets.importcopyfromproject_commonimportparser_for,validate_args,seed_everything,run_experiment,write_jsonfromproject_dataimportload_data,preprocessingfromproject_modelsimportbuild_modeldefmain():parserparser_for(__doc__,artifacts/13_fashion,epochs5,batch_size128)argsparser.parse_args()validate_args(parser,args)data,classes,manifestload_data(fashion,args)results{}forname,specin[(mlp,{kind:fashion_mlp}),(cnn,{kind:gray_cnn,classes:10})]:seed_everything(args.seed,args.threads)currentcopy.copy(args)current.outputargs.output/name resultrun_experiment(build_model(spec),spec,data,classes,manifest,preprocessing(fashion),current)results[name]{parameters:result[parameters],best_epoch:result[best_epoch],test_accuracy:result[test][accuracy],test_macro_f1:result[test][macro_f1]}write_json(args.output/comparison.json,results)print(results)if__name____main__:main()输出目录中的mlp与cnn分别保存最优权重、训练历史、混淆矩阵数据和预测图。顶层comparison.json汇总两者参数量、最优轮次、测试准确率与macro-F1。python examples/visualize_run.py--run artifacts/13_fashion/mlp python examples/visualize_run.py--run artifacts/13_fashion/cnn python examples/predict_image.py--checkpoint artifacts/13_fashion/cnn/best.pt--imagedata/my_clothing.png单图输入也应尽量接近数据集的灰度、背景和主体占比。真实商品照片涉及更复杂背景后面第15篇会用真实彩色图与迁移学习继续处理这种差异。公共函数和模型完整代码见配套工程及公共代码附录。本篇不填写预设的“CNN比MLP高几个百分点”比较结果以实际输出为准。05 常见问题与自测问题1给两个模型设同一个seed实验就完全公平了吗还要控制划分、样本数、预处理、训练预算和选择规则。不同结构的初始化也不会因同一个seed变成相同参数。问题2为什么这次不先给CNN加很多数据增强先让两个起点共享输入条件。后续要研究增强作用可以固定模型再单独比较有无增强。问题3参数量接近就代表计算量和显存相同吗不代表。中间特征、运算方式和输入尺寸也会影响成本不能只凭参数量判断运行速度。问题4能不能只把测试结果更好的模型叫“最佳模型”本篇报告两个已确定配置的测试结果。若还要据此不断修改和选择方案就需要保留新的独立最终评价数据。问题5测试macro-F1和Accuracy为什么不同它们统计的角度不同。macro-F1逐类计算再等权平均更容易反映具体类别的短板。06 本篇回顾与下一步这次项目增加的能力是把模型比较组织成一个可解释的实验。结果文件负责记录数值数据划分和训练约定负责让这些数值有可比较的含义。中文常见英文或写法多层感知机MLP归纳偏置Inductive Bias宏平均F1Macro-F1对照实验Controlled Comparison下一篇进入32×32彩色自然图像用适配小图的ResNet学习更复杂的特征。参考与延伸阅读Torchvision FashionMNIST接口PyTorch可复现性说明
延伸阅读

更多相关文章

2026/11/6 8:49:48

DiscoveryRSI:通过递归学习发现有价值的假设

26年10月,论文“DiscoveryRSI: Recursively Learning to Discover Valuable Hypotheses”,来自PhAI Labs、香港中文大学、密歇根大学、新加坡国立大学、复旦大学、北京大学人民医院、北京大学、斯坦福大学、香港科技大学、加州大学圣塔芭芭拉分校、东南大…

2026/11/6 8:49:48

CAN 技术系列 03 · CAN 位定时与同步

📚 CAN总线技术系列 持续更新中 本系列从差分电气层一路打到 Linux SocketCAN,把"两根线"背后的电气/协议/控制器/驱动/实战全拧成一根线。 👉 想系统追更,戳这里查看完整专栏: 【CAN 技术系列】 👉 其他技…

2026/11/6 10:50:30

主模式RTL设计:状态机与三态驱动的物理实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 10:50:30

Powershell远程管理服务器客户端

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 10:50:30

Java 开发日记高级~

Java.慈祥的开发日记 Java基础语法 SSM学习专栏 JDK8 新特性 Linux服务器开发使用 环境搭建🤖 Linux 基础入门学习 Docker K8S部署使用 Docker入门学习Docker网络 Git 和 Github 项目管理工具 分布式版本控制系统Git分布式版本控制系统Git 二:…

2026/11/6 10:45:29

GitHub镜像站搭建指南:提升代码仓库访问效率

1. 项目背景与核心价值 国内开发者在使用GitHub时经常遇到访问不稳定、克隆速度慢等问题。搭建本地镜像站能够显著提升代码仓库的访问效率,特别适合企业级开发团队或高校实验室等需要频繁与GitHub交互的场景。不同于简单的代理方案,完整的镜像站可以实现…

2026/11/6 10:45:29

错题本数字化与高效学习方法论

1. 错题整理的价值与方法论 错题本是每个学习者都应该拥有的秘密武器。2013年的错题整理看似是过去式,但其中蕴含的学习方法论却具有永恒价值。我至今仍保留着2013年那本已经泛黄的错题本,它不仅记录了我当年的知识盲区,更见证了我的学习轨迹…

2026/11/6 10:45:29

企业应收账款数字化管理解决方案与实施指南

1. 应收账款管理的行业痛点应收账款管理一直是企业财务流程中最容易出问题的环节之一。根据某商业信用管理协会的调研数据显示,超过67%的中小企业都曾因应收账款管理不善导致现金流断裂。传统管理方式主要依赖Excel表格和纸质单据,业务员需要手动记录每笔…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑