CS231n Assignment 2(2024)实战全解:多层全连接网络、Batch Normalization、Dropout、CNN 与 PyTorch
发布时间:2026/10/6 2:34:39 作者:尧图编辑部 阅读量:1,286
实战全解:多层全连接网络、Batch Normalization、Dropout、CNN 与 PyTorch)
教程文档深度学习计算机视觉【免费下载链接】cs231n.github.ioPublic facing notes page项目地址https://gitcode.com/gh_mirrors/cs/cs231n.github.io点击查看免费下载本篇指南以 CS231n 2024 春季 Assignment 2 官方作业文档为主线完整拆解五个核心任务任意深度全连接网络与六大优化更新规则、Batch/Layer Normalization、Dropout 正则化、卷积神经网络各层实现以及基于 PyTorch 在 CIFAR-10 上的实战调优。读完本文你将掌握从数值梯度验证、逐层反向传播到完整 CNN 训练与提交 Gradescope 的整套流程并能结合本仓库的课程讲义源码理解每个技术点的底层原理。作业概览目标与知识点地图2024 春季版 Assignment 2 的截止时间为2024 年 5 月 6 日周一23:59 PST官方标注为红色提示。作业共含 5 个问题Q1–Q5配套 Starter Code 以 Colab notebook 形式提供仓库中可直接获取 assignment2_colab.zipColab 版与 assignment2_jupyter.zip本地 Jupyter 版。官方在文档中明确列出本作业的 7 项核心目标构成整份作业的知识点地图理解神经网络及其分层架构的组织方式理解并能够实现向量化的反向传播实现多种用于优化神经网络的更新规则update rules实现Batch Normalization与Layer Normalization用于训练深层网络实现Dropout以正则化网络理解卷积神经网络CNN的架构并训练它们获得主流深度学习框架PyTorch的实战经验。从仓库讲义看这些目标与课程笔记 neural-networks-2.md数据预处理、权重初始化、BatchNorm、正则化、损失函数和 neural-networks-3.mdSGD 及其变体的参数更新高度对应——Assignment 2 本质上是把讲义中的理论逐行实现成可运行的代码。环境与准备工作Setup官方推荐的作业工作流是Google Colaboratory云端远程工作课程讲义 setup.md 中给出了完整说明。要点包括Colab 预装 PyTorch、TensorFlow 等依赖所有同学拥有相同依赖环境并免费提供 GPUK80、P100与 TPU 加速器——这对 Q4/Q5 的 CNN 训练尤为重要每个作业提供 zip 下载链接即上文两个 zip上传至 Google Drive 后可在 Colab 中打开 notebook 并随时保存进度回 Drive资源不保证持续在线闲置过久或连接超过约 12 小时Colab VM 会断开未保存的进度会丢失。因此作业文档特别强调养成周期性保存的习惯File - Save避免 Colab VM 断连导致进度丢失切换 GPU 只需Runtime - Change runtime type - Hardware Accelerator - GPU。本地开发虽非官方支持但作业 zip 内附带requirements.txt可用于创建虚拟环境后安装依赖对应讲义 setup.md 中的pip install -r requirements.txt步骤可用 Anaconda 或 Python 原生venv搭建环境。完成除collect_submission.ipynb之外的所有 notebook 后再进入文末的提交流程。Q1多层全连接神经网络与六大更新规则Q1 的载体是FullyConnectedNets.ipynb核心任务是实现任意深度multi-layer的全连接网络包括逐层的前向传播、反向传播backpropagation以及用于优化这些模型的多种流行更新规则。实现时需注意向量化vectorized写法这与讲义 neural-networks-2.md 中数据预处理章节强调的 numpy 向量化理念一脉相承。更新规则部分对应讲义 neural-networks-3.md 的 SGD and bells and whistles 小节作业要求逐一实现以下算法Vanilla SGDupdate -learning_rate * dW梯度直接积分到参数上neural-networks-3.mdMomentum动量维护速度变量v mu * v - learning_rate * dW; W v参数向量在梯度一致的任何方向上持续累积速度收敛更快neural-networks-3.mdNesterov MomentumNAG在前瞻位置x mu * v处计算梯度而非当前陈旧位置对凸函数有更强的理论收敛保证实践中也一致地略优于标准动量neural-networks-3.mdAdaGrad按梯度平方累积cache对每个权重做自适应学习率调整但学习率会单调递减RMSProp用梯度平方的滑动平均decay_rate典型取 0.9、0.99、0.999替代 AdaGrad 的累积和既保留逐权重的学习率调节又避免更新单调变小neural-networks-3.mdAdam形如带动量的 RMSProp用平滑梯度m替代原始可能含噪的梯度论文推荐eps1e-8, beta10.9, beta20.999并带有bias correction机制补偿初期m, v为零偏置的问题neural-networks-3.md。讲义在总结中给出的实践建议同样适用于 Q1推荐默认使用 Adam或 SGD Nesterov Momentum作为备选方案neural-networks-3.md。实现更新规则时务必先通过作业 notebook 中给定的数值梯度numerical gradient与解析梯度对比检查确保反向传播正确再接入任意一种更新规则进行训练。Q2Batch Normalization 与 Layer NormalizationQ2 的载体是BatchNormalization.ipynb要求实现batch normalization含前向与反向传播并使用它训练深层的全连接网络。讲义 neural-networks-2.md 对该技术的定位给出了精炼概括由 Ioffe 与 Szegedy 提出的 Batch Normalization 通过在训练初期显式强制网络中各层激活服从单位高斯分布缓解了权重初始化的诸多麻烦其实现方式通常是把 BatchNorm 层紧接在全连接层或卷积层之后、非线性激活之前由于归一化是可微操作可以无缝集成进网络本身等价于在网络每一层内以可微方式内嵌预处理。使用 BatchNorm 的网络对糟糕的初始化显著更鲁棒。仓库 assets/a2/batchnorm_graph.png 给出了 BatchNorm 模块的正向/反向数据流示意输入 X 在模块内依次计算均值 μ、方差 σ、归一化变量 v最终输出 Y 并接到损失 L绿色箭头为前向传播的数据流红色箭头为反向传播的梯度回传路径——这正是实现BatchNormalization.ipynb时需要在 forward 缓存中间量、在 backward 逐项求导的完整计算图。作业文档同时将Layer Normalization列为 Q2 的实现目标之一。仓库 assets/a2/normalization.png 以 N/C/H/W 四维张量为背景直观对比了三种归一化统计量的计算范围差异Batch Norm沿单个通道 C、所有样本 N、所有空间位置 H/W 组成的区域计算统计量Layer Norm在单个样本 N、所有通道 C、所有空间位置 H/W 的范围内计算Group Norm在单个样本 N、部分通道分组、所有空间位置 H/W 的范围内计算。实现时测试通常会验证批量归一化后的激活均值接近 0、方差接近 1训练模式与测试模式行为一致测试时使用运行统计量或固定统计量并且 BatchNorm 的加入应让深层网络的训练收敛明显更快。Q3Dropout 正则化Q3 的载体是Dropout.ipynb要求实现dropout并研究其对模型泛化能力generalization的影响。讲义 neural-networks-2.md 将 Dropout 归入正则化Regularization体系与 L2/L1、Max norm 约束并列并给出关键机制训练时每个神经元以概率 p超参数保持激活、否则置零等价于在完整网络内采样一个子网络进行训练。讲义 neural-networks-2.md 给出了 vanilla dropout 的 3 层网络示例训练阶段用np.random.rand(*H.shape) p生成掩码并逐元素乘到隐层输出上测试阶段不再 dropout但必须将每层输出乘以 p以保持测试输出与训练时期望输出一致神经元输出 x 在 dropout 下的期望为 px (1-p)·0。vanilla 版本要求测试时缩放这是其不理想之处。作业应实现讲义推荐的inverted dropout反向 dropoutneural-networks-2.md把缩放挪到训练期掩码写成(np.random.rand(*H.shape) p) / p训练时丢弃并缩放测试时前向传播完全不变。其好处是测试代码可以保持不动且调整 dropout 位置输入层、任意隐层时无需改动预测逻辑。讲义最终给出的实践默认值是 p0.5可在验证集上调优并且建议 L2 正则全局、交叉验证确定强度与 dropout应用于各层之后组合使用neural-networks-2.md。Dropout.ipynb的典型验证路径包括检查训练与测试模式下输出分布的差异、对比有无 dropout 时训练/验证准确率曲线dropout 应缓解过拟合、缩小训练与验证差距。Q4卷积神经网络层实现Q4 的载体是ConvolutionalNetworks.ipynb要求实现卷积网络中常用的若干新层。讲义 convolutional-networks.md 给出了与作业完全对应的理论框架Convolutional Layer卷积层核心是局部连接 参数共享。每个滤波器在空间上宽、高尺寸较小但沿输入深度方向贯穿全部通道convolutional-networks.md。输出体积的空间尺寸由三个超参数控制——depth滤波器数量、stride步长、zero-padding零填充计算公式为(W - F 2P)/S 1convolutional-networks.md。作业中实现前向传播时需用 im2col 或循环 向量化组合完成滑动窗口点积并在 backward 中正确路由梯度反向卷积Pooling Layer池化层对空间维度降采样常见为 max pooling。讲义特别指出backward 时只需把梯度路由到前向中取到最大值的那个位置这些位置称为switches前向需缓存 argmax 索引convolutional-networks.md。作业同样需要实现空间池化与反向传播Fully-Connected Layer全连接层与普通神经网络一致激活可由矩阵乘法加偏置计算convolutional-networks.md。值得留意的是 FC 层与 CONV 层的等价转换任何 FC 层都可以转换为滤波器尺寸等于输入体积尺寸的 CONV 层例如把 [7x7x512] 上的 K4096 FC 层改写为 F7 的 CONV 层输出 [1x1x4096]从而让网络在更大图像上单次前向滑动、共享计算convolutional-networks.md。ConvolutionalNetworks.ipynb中通常会要求数值梯度验证每个新层的前向/反向实现并将各层组装成可训练的 CNN 完成一次小型 CIFAR-10 训练。Q5PyTorch 在 CIFAR-10 上的实战Q5 的载体是PyTorch.ipynb是作业中唯一的框架实战部分目标直指 PyTorch 这一主流深度学习框架。文档描述的学习路径是先在 notebook 中学习框架的基本机制张量操作、autograd 自动微分、nn.Module层定义、优化器与学习率调度最后训练一个自行设计的卷积网络在 CIFAR-10 上争取尽可能高的性能。结合讲义 convolutional-networks.md 的示例架构一个合理的 CIFAR-10 起点是[INPUT - CONV - RELU - POOL - FC]INPUT [32x32x3] 存放原始像素CONV 层输出如 [32x32x12] 的激活体积RELU 逐元素激活体积不变POOL 下采样得到 [16x16x12]最后 FC 层输出 [1x1x10] 的类别分数。实践中可在此骨架上加深、加宽并叠加 BatchNorm放在卷积/全连接层之后、非线性之前、Dropout 与数据增强。PyTorch 的 autograd 机制会让反向传播自动完成因此本部分的核心考察点是模型架构设计、数据加载DataLoader、训练循环、超参数学习率、batch size、epoch、正则化强度调整以及对训练/验证曲线loss、accuracy的诊断能力。作业提交collect_submission 与 Gradescope官方提交说明详见 assignments/2024/assignment2.md强调提交的 notebooks 必须已经运行且单元格输出可见。随后按以下两步提交运行collect_submission.ipynb在 Colab 中打开并执行全部单元格。该脚本会完成两件事生成包含你全部代码.py与.ipynb的压缩包a2_code_submission.zip将所有 notebooks 转换合并为一个 PDF 文件a2_inline_submission.pdf。 提交成功时会显示确认信息### Done! Please submit a2_code_submission.zip and a2_inline_submission.pdf to Gradescope. ###提交到 Gradescope课程编号 527613将 PDF 与 zip 文件提交至 Gradescope 对应的作业入口。注意先将a2_code_submission.zip与a2_inline_submission.pdf下载到本地再进行提交。此外文档专门给出了一条关键注意事项完成所有 notebook 后请确保最近一次内核执行顺序是按时间先后chronological排列的——若执行顺序混乱会影响 Gradescope 自动评分器autograder。如不满足应对该 notebook 重启内核并使用 Runtime 菜单中的 Restart and Run All 重新按序执行全部单元格。小结Assignment 2 是 CS231n 从线性分类器迈向深度网络的关键一跃FullyConnectedNets.ipynb打磨反向传播与优化器基本功BatchNormalization.ipynb与Dropout.ipynb让你亲手实现现代深度学习中两个最常用的训练利器ConvolutionalNetworks.ipynb拆解 CNN 的每一块积木而PyTorch.ipynb则把这一切落到真实框架与真实数据上。配套的课程讲义neural-networks-2.md、neural-networks-3.md、convolutional-networks.md与 setup.md 环境指南可在仓库中随时查阅作为每个实现环节的理论与操作依据。赞分享教程文档深度学习计算机视觉【免费下载链接】cs231n.github.ioPublic facing notes page项目地址https://gitcode.com/gh_mirrors/cs/cs231n.github.io点击查看免费下载相关推荐CS231n 2023 Assignment 2 实践指南多层全连接网络、Batch Normalization、Dropout、CNN 与 PyTorch 实战CS231n 2023 Assignment 2 实践指南多层全连接网络、Batch Normalization、Dropout、CNN 与 PyTorch教程文档深度学习计算机视觉CS231n 2021 Assignment 2 全解多层全连接网络、Batch Normalization、Dropout 与卷积网络实践指南CS231n 2021 Assignment 2 全解多层全连接网络、Batch Normalization、Dropout 与卷积网络实践指南 导读本文以教程文档深度学习计算机视觉CS231n 2026 Assignment 2 全解Batch Normalization、Dropout、CNN 与 PyTorch 图像描述实战CS231n 2026 Assignment 2 全解Batch Normalization、Dropout、CNN 与 PyTorch 图像描述实战 本篇指教程文档深度学习计算机视觉上一篇如何 10 分钟用 easy-rsa 搭好内网证书体系新手避坑全指南下一篇黑苹果EFI配置太折磨人OpCore-Simplify把OpenCore构建压进30分钟创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考