实验3:卷积神经网络(PyTorch CNN实践)
本博客详细记录了基于PyTorch的卷积神经网络入门实验在MNIST上对比了全连接网络与卷积网络的性能差异在CIFAR10上分别实现了LeNet和VGG变体进行图像分类。通过打乱像素顺序的对照实验直观验证了卷积网络利用图像空间结构的本质从LeNet的63%到VGG的74.71%看到了网络深度对复杂分类任务的提升作用。实验涵盖张量操作、模型定义、训练循环、超参数调优及8道思考题。项目 内容作者昵称 Morwen_OUC本实验属于哪门课程 中国海洋大学《软件工程原理与实践》实验名称 实验3卷积神经网络完成日期 2026年10月18日一、实验内容本次实验在Google ColabT4 GPU上完成三个CNN相关的代码练习①在MNIST上对比参数量相近的全连接网络与卷积网络并验证打乱像素后CNN的优势消失②用LeNet对CIFAR10分类③用简化版VGG对CIFAR10分类。运行设备由torch.cuda.is_available()判断为cuda:0同一份代码无需修改即可在CPU/GPU上运行仅GPU速度更快。第一部分代码练习练习1MNIST上全连接网络vs卷积网络关键对比参数量几乎相同的全连接网络和卷积网络谁在MNIST上更强再把像素顺序打乱后会怎样导入PyTorch相关库自动检测GPU设备加载MNIST手写数字数据集训练集60000张、测试集10000张28×28灰度图。构造一个784→8→8→10的全连接网络FC6442参数和一个两层卷积池化的CNN约5994参数两者参数量几乎相同唯一区别是CNN保留二维空间结构。FC训练1个epoch后测试准确率为88%CNN训练1个epoch后测试准确率为98%。参数量几乎相同的情况下CNN比FC高出10个百分点。个人理解 CNN之所以更强是因为卷积利用了图像的局部性相邻像素相关和平移不变性同一个物体在图中任何位置都应该被识别为同一类而池化进一步增强了对微小平移的鲁棒性。FC把图片直接拉成784维向量完全丢失了空间结构信息。为了验证CNN确实在利用空间结构我们用一个固定的随机置换打乱所有图片的像素顺序对每张图用同一个permutation肉眼看就是雪花噪点。打乱后分别训练FC和CNN结果汇总原图 打乱像素后FC6442参数 88% 90%基本不变CNN5994参数 98% 92%下降打乱像素后FC准确率几乎不变它本来就不看空间结构而CNN的优势大幅缩水从领先10个点缩到只领先2个点。这反过来证明CNN确实在利用图像的二维邻域关系。练习2LeNet对CIFAR10分类CIFAR10包含10类3×32×32彩色图飞机、汽车、鸟、猫、鹿、狗、蛙、马、船、卡车。数据经过transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))归一化到[-1,1]。定义LeNet风格网络Conv(3→6,5) → Pool → Conv(6→16,5) → Pool → FC(400→120→84→10)。用Adamlr0.001训练10个epoch。训练完成后取8张测试图看预测效果LeNet在10000张测试图上的准确率为63%。练习3VGG变体对CIFAR10分类按指导文档的结构定义简化版VGG64 conv→pool → 128 conv→pool → 256 conv×2→pool → 512 conv×2→pool → 512 conv×2→pool → FC(512→10)。共约923万参数。训练10个epoch后VGG在10000张测试图上的准确率为74.71%。三个练习的准确率对比模型 数据集 参数量 测试准确率FC784→8→8→10 MNIST 6442 88%CNN两层卷积 MNIST 5994 98%LeNet CIFAR10 ~6万 63%VGG变体 CIFAR10 923万 74.71%可以看到网络越深、参数越多在更复杂的CIFAR10上准确率越高63% → 74.71%。第二部分思考题DataLoader里shuffle取不同值有什么区别shuffleTrue时每个epoch开始前会打乱训练数据的顺序让每个batch里的样本组合不同避免模型按固定顺序学习导致过拟合于特定batch的统计特性也有利于梯度下降更平稳地收敛。shuffleFalse时数据按原始顺序读取训练集可能有类别排序如CIFAR10默认按类别排列导致模型先学完一类再学另一类收敛不稳定。一般训练集shuffleTrue测试集shuffleFalse测试不需要打乱保持顺序方便对照。transform里取不同值有什么区别transform定义了对图像的预处理流水线。常见操作 - ToTensor()把PIL图片或numpy数组转换成PyTorch Tensor像素值从[0,255]缩放到[0,1] - Normalize(mean, std)对每个通道做标准化(x - mean) / std把数据分布平移到均值0、标准差1有利于训练稳定 - 还可以加RandomCrop、RandomHorizontalFlip、ColorJitter等数据增强操作在训练时随机变换图像相当于扩充数据集、防止过拟合。训练集通常做增强标准化测试集只做ToTensor标准化不做随机变换保证评估可复现。epoch和batch的区别epoch把整个训练集完整过一遍。一个epoch内所有训练样本都被模型看到一次。batch每次模型参数更新时实际喂入的一小批样本数量如batch_size64。一个epoch包含训练集大小 / batch_size个batch。iteration一个batch 一次参数更新。设epoch10表示完整看10遍训练数据batch_size64表示每次64张图算一次梯度。batch_size越大梯度估计越准但内存占用越大epoch太多会过拟合。1×1卷积和全连接FC有什么区别主要起什么作用形式上1×1卷积在每个空间位置上做一次C_in × 1 × 1到C_out × 1 × 1的线性变换相当于对每个像素位置的所有通道做一次全连接。它保持了空间维度H×W不变只改变通道数。与FC的区别FC把所有空间位置拉平后做全局矩阵乘法丢失空间结构1×1卷积在每个位置独立做相同的线性变换参数共享保留空间布局。作用①跨通道信息融合如把256通道压到64通道降低计算量②在不改变特征图尺寸的情况下增加网络深度和非线性③相当于在通道维度上做特征重加权。5. Residual Learning残差学习为什么能提升准确率深层网络在训练时会遇到退化问题网络加深后训练误差反而上升不是过拟合而是优化困难因为多层非线性堆叠后难以学到恒等映射。ResNet的残差块把输出设计为H(x) F(x) x即让网络学习残差F(x) H(x) - x。这样如果最优映射接近恒等映射只需把F(x)趋近于0比直接学恒等映射容易得多短路连接为梯度提供了一条高速公路反向传播时梯度可以直接传回浅层缓解梯度消失。练习2里的网络和1989年LeCun提出的LeNet有什么区别原始LeNet-51998年结构输入32×32灰度图 → Conv(1→6,5) → AvgPool → Conv(6→16,5) → AvgPool → FC(120→84→10)。本次实验的LeNet变体输入是3×32×32彩色图用MaxPool替代了AvgPool激活函数用ReLU而非tanh优化器用Adam而非SGD。整体结构思想一致但适配了彩色输入并使用了现代激活函数和优化器。练习2里卷积后feature map尺寸变小如何应用Residual Learning标准残差块要求F(x)和x的尺寸相同才能相加。但卷积池化后特征图的空间尺寸和通道数通常会变化无法直接短路连接。解决方法在短路路径上添加一个1×1卷积如nn.Conv2d(C_in, C_out, kernel_size1, stridestride)把x的通道数和空间尺寸投影到与F(x)相同再相加。有什么方法可以进一步提升准确率数据增强随机裁剪、水平翻转、颜色抖动扩充训练集更深更宽的网络用ResNet、DenseNet等现代架构替代简单VGG正则化Dropout、Weight Decay、Batch Normalization学习率调度用StepLR/CosineAnnealingLR逐步降低学习率更好的优化器SGDMomentum 学习率衰减通常比Adam泛化更好预训练在ImageNet上预训练后微调迁移学习。三、问题总结与体会遇到的问题与解决CIFAR10下载极慢Colab在国内访问多伦多大学服务器只有30~40kB/s170MB需要近1小时。解决办法是让它在后台慢慢下载期间不中断等下完后再继续跑后续格子。误点定义网络格导致准确率暴跌LeNet训练完成后不小心又点了一下定义网络那格把训练好的权重重置为随机初始化导致测试准确率从63%暴跌到10%。解决办法是重新按顺序跑定义网络 → 训练 → 测试。GPU未切换第一次跑第一格时输出device: cpu说明没选GPU运行时。切到T4 GPU后重新跑后续训练速度明显加快。收获与体会通过FC vs CNN的对照实验直观理解了卷积利用空间结构的本质——打乱像素后FC不变而CNN优势消失比看书本定义深刻得多从LeNet63%到VGG74.71%的对比看到了网络深度和参数量对复杂图像分类任务的提升作用学会了在Colab上完整走通加载数据→定义网络→训练循环→测试评估的深度学习流水线。

相关新闻

React Native for OpenHarmony 实战:三方库 react-native-star-rating-widget 的鸿蒙化适配指南

React Native for OpenHarmony 实战:三方库 react-native-star-rating-widget 的鸿蒙化适配指南

本文记录把 react-native-star-rating-widget(星级评分 / 评分展示)适配到 HarmonyOS 的完整过程。 它做的事:用 SVG 画星星(react-native-svg 的 Path LinearGradient),支持整星/半星/四分之一星、 PanRe…

2026/10/19 12:13:26 阅读更多 →
WSL2 2026实战:Windows开发环境搭建与性能调优完整指南

WSL2 2026实战:Windows开发环境搭建与性能调优完整指南

对很多 Windows 开发者来说,WSL2 早已不是“备用方案”,而是主力开发环境。2026 年的 WSL2 不再只是跑个 Ubuntu、装个 Node.js 那么简单,它已经深度融入 AI 开发、容器化部署、GPU 计算和企业安全策略之中。但与此同时,配置不当导…

2026/10/19 12:13:26 阅读更多 →
2026前端性能优化实战:Core Web Vitals达标与用户体验提升指南

2026前端性能优化实战:Core Web Vitals达标与用户体验提升指南

一、2026年Core Web Vitals新标准:你必须知道的3个变化Google在2025年底完成了Core Web Vitals的最新一轮调整,2026年的优化重点已发生明显转移:INP(Interaction to Next Paint)全面替代FID:FID仅衡量首次输…

2026/10/19 12:13:26 阅读更多 →

最新新闻

工业时序预测实战:基于CNN-BiLSTM-Attention的三模态融合模型

工业时序预测实战:基于CNN-BiLSTM-Attention的三模态融合模型

1. 三模态融合的架构设计与选型理由1.1 为什么偏偏是CNN、BiLSTM、Attention三件套工业时序预测(比如设备剩余寿命预测、关键部件温度趋势预估、整线能耗滚动预报)有一个共性痛点:数据维度高、噪声大、时间依赖长,单靠一种模型总是…

2026/10/19 12:59:13 阅读更多 →
在Claude Code和Codex之上加一层决策层:让Coding Agent从碰运气变可预期

在Claude Code和Codex之上加一层决策层:让Coding Agent从碰运气变可预期

1. 为什么要在 Claude Code 和 Codex 之上再叠一层决策层先说结论:单纯把 Claude Code 或 Codex 接进工作流,能解决"写代码"的问题,但解决不了"该不该写、先写哪块、写到什么程度停手"的问题。Jev 这个项目要做的&#x…

2026/10/19 12:59:13 阅读更多 →
CMake target_link_libraries签名冲突:openvslam报错定位与统一修复

CMake target_link_libraries签名冲突:openvslam报错定位与统一修复

1. 问题背景与核心症结拆解1.1 这个报错到底在说什么做过C项目构建的人,大概率都在CMake这个环节栽过跟头。The plain signature for target_link_libraries has already been used with the target "openvslam"这个报错,字面意思很直白&#…

2026/10/19 12:59:13 阅读更多 →
bypy百度网盘命令行工具实战指南

bypy百度网盘命令行工具实战指南

1. 为什么非得在命令行里碰百度网盘?——一个被低估的生产力缺口你有没有过这种时刻:深夜改完一份200MB的实验数据集,想传给合作者,但图形界面的百度网盘客户端卡在“正在扫描文件”上纹丝不动;或者在一台没有桌面环境…

2026/10/19 12:59:13 阅读更多 →
远程驾驶技术解析:Vay基于NVIDIA DRIVE AGX的算力与安全架构

远程驾驶技术解析:Vay基于NVIDIA DRIVE AGX的算力与安全架构

1. “没有司机的车”背后,其实是远程司机在开车 最近两年,自动驾驶行业里出现了一种和“全无人Robotaxi”并行的路线—— 远程驾驶(Teledriving) 。Vay这家公司主推的就是这个方向:车辆本身具备一定感知和计算能力&a…

2026/10/19 12:59:13 阅读更多 →
机器人技术十年演进:从运动控制到具身智能的核心脉络

机器人技术十年演进:从运动控制到具身智能的核心脉络

1. 十年,机器人技术到底变了什么 翻了翻过去十年的项目笔记,最早接触机器人还是在实验室里调试一台六轴机械臂,用的还是古老的示教器,一点一点把轨迹录进去,机器人一遍一遍地重复执行。那时候谁能想到,十年…

2026/10/19 12:58:11 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

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

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →