文章目录第 1 章 神经网络简介第 2 章 PyTorch 入门总结第 1 章 神经网络简介神经网络的学习并不是灌输规则也不是理解概念而是通过反复调整参数让函数逐步逼近我们期望的映射关系。具体来说神经网络的学习过程可以分为 5 个步骤初始化参数训练开始前给参数θ \thetaθ赋予一组随机值此时模型的输出是粗糙、甚至无意义的模型预测将输入x xx输入模型根据当前的参数得到输出y yy计算偏差对比模型输出y yy和真实目标值判断模型做得好不好这一步会用到后续要学的损失函数调整参数根据偏差的大小和方向调整参数θ \thetaθ的取值让模型的输出更接近目标重复迭代重复步骤 2-4直到模型的输出足够准确参数不再需要大幅调整。 那神经网络真正学到的是什么一组最优的参数配置以及由这组参数所决定的函数行为。神经网络的学习本质上是在参数空间中寻找一组更好的参数使损失函数不断下降。回归任务的目标通常是预测一个连续数值。比如根据历史气温预测明天气温对于这类问题一个常见的损失函数是均方误差Mean Squared Error, MSE。计算每一个样本预测误差的平方然后取平均。预测越准确MSE 就越小。神经网络训练基本流程前向传播负责用当前参数产生预测损失函数负责衡量当前预测有多差反向传播负责计算每个参数对应的梯度优化算法负责根据梯度真正修改参数。最基本的参数更新方法就是梯度下降Gradient Descent时PyTorch 才会沿着刚才记录的依赖关系把梯度算出来并写回到叶子节点上。如果不调用PyTorch 就不会去计算梯度。requires_grad是张量的属性表示这个张量是否有资格被 Autograd 追踪no_grad()是上下文状态表示当前这段计算是否需要被记录。no_grad()只是暂时关闭记录离开这个代码块之后梯度记录会恢复。如果需要重新加入自动微分系统的话可以在之后设置requires_gradTrueenable_grad()局部恢复梯度记录inference_mode()纯推理不要再为反向传播保留任何可能性。虽然x.requires_gradTrue但y的计算发生在torch.no_grad()上下文中因此这次计算不会被 Autograd 记录得到的y也不会继续跟踪梯度。因为训练阶段需要反向传播计算模型参数的梯度因此前向计算需要记录相应的计算图而验证和推理阶段通常只需要得到模型的前向计算结果并不会进行反向传播或更新参数因此可以关闭梯度记录。这样可以避免保存反向传播所需的中间信息减少额外的内存占用和计算开销。第一个在no_grad里所以是False第二个在enable_grad里面所以是True。Dataset 负责定义一个样本长什么样以及如何取出一个样本。如果只是普通张量数据用TensorDataset就够了。但是一旦数据稍微复杂一点比如图片分类数据集或者文本分类数据集我们就需要自己写一个 Dataset在__getitem__()里实现读取文件、做预处理、返回标签的逻辑。-no_grad()是上下文状态表示当前这段计算是否需要被记录。no_grad()只是暂时关闭记录离开这个代码块之后梯度记录会恢复。如果需要重新加入自动微分系统的话可以在之后设置requires_gradTrueenable_grad()局部恢复梯度记录inference_mode()纯推理不要再为反向传播保留任何可能性。虽然x.requires_gradTrue但y的计算发生在torch.no_grad()上下文中因此这次计算不会被 Autograd 记录得到的y也不会继续跟踪梯度。因为训练阶段需要反向传播计算模型参数的梯度因此前向计算需要记录相应的计算图而验证和推理阶段通常只需要得到模型的前向计算结果并不会进行反向传播或更新参数因此可以关闭梯度记录。这样可以避免保存反向传播所需的中间信息减少额外的内存占用和计算开销。第一个在no_grad里所以是False第二个在enable_grad里面所以是True。classSimpleTensorDataset(utils.Dataset):Simple dataset that wraps training data and targets.def__init__(self,X:Tensor,y:Tensor):ifX.size(0)!y.size(0):raiseAssertionError(X and y must have the same length.)self.XX self.yydef__len__(self)-int:returnlen(self.X)def__getitem__(self,idx:int)-tuple[Tensor,Tensor]:Xself.X[idx]yself.y[idx]returnX,yDataLoader 负责把很多样本组织成 mini-batch并处理打乱、多进程加载、拼接 batch、pin memory 等训练时常见细节。dataloaderutils.DataLoader(dataset,batch_size32,shuffleTrue,)X,ynext(iter(dataloader))print(Input batch shape:,X.shape)print(Target batch shape:,y.shape)从 Dataset 中取出若干个样本由 batch_size 指定把这些样本拼成一个 batch如果 shuffleTrue每个 epoch 会打乱样本顺序返回可以直接用于模型训练的张量。Dataset: index - sampleDataLoader: samples - batch如果每个样本的形状不一样默认拼接就会失败。最常见的例子是自然语言处理中的变长序列需要自定义 collate_fn把这些样本整理成模型可以接收的 batch。例如我们可以把变长序列填充到当前 batch 中的最大长度在实际任务中collate_fn 很常用。比如文本任务中对变长句子做 padding目标检测中每张图的目标框数量不同不能简单 stack多模态任务中把图像、文本、mask、metadata 组织成字典对一个 batch 内的数据做额外整理。num_workers让 DataLoader 启动多个子进程来提前加载数据。num_workers0所有数据加载都发生在主进程里num_workers 0PyTorch 会启动多个 worker 进程它们负责提前从 dataset 里取样本、执行 collate_fn并把准备好的 batch 放到队列里。主进程训练时就可以从队列中取已经准备好的 batch这样数据加载和模型计算可以重叠persistent_workers控制这些子进程要不要跨 epoch 保留下来。总结本文从神经网络的基本原理出发梳理了其学习过程的 5 个核心步骤初始化参数、模型预测、计算偏差、调整参数与重复迭代。神经网络学习的本质是在参数空间中不断寻找一组更优的参数使损失函数持续下降而前向传播、损失函数、反向传播与优化算法四者共同构成了训练的基本流程。随后我们进入 PyTorch 的实践环节重点理解了 Autograd 自动微分机制requires_grad决定张量是否被追踪no_grad()与enable_grad()控制梯度记录的开关inference_mode()则用于纯推理场景。在数据加载方面Dataset负责定义样本的读取方式DataLoader负责将样本组织成 mini-batch并通过collate_fn处理变长序列等复杂情况num_workers与persistent_workers则进一步优化了数据加载的效率。掌握这些基础概念后具备了搭建并训练一个简单神经网络模型的能力。下一步可以尝试用 PyTorch 实现一个完整的分类任务在实践中加深对自动微分与数据流水线的理解。
企业数字化 ERP 产品动态
相关推荐
12G显存跑27B模型:量化、KV Cache优化与投机解码实战 1. 为什么要在12G显存上折腾27B模型先把结论摆在前面:12G显存跑27B模型,128K上下文,decode速度50 tokens/s,这件事在一年前基本属于天方夜谭,但现在通过量化压缩、KV Cache优化、投机解码这几条路组合起来,… · 2026/9/25 18:03:30
50万AI Agent上线一周关停:企业级Agent落地失败复盘与实操指南 1. 50万AI Agent上线一周就关停,问题到底出在哪上周跟一个做企业数字化的老朋友吃饭,他跟我讲了个事:他们隔壁公司老板花了50万找外包团队搞了个AI Agent,对接了内部知识库和工单系统,上线发布会搞得挺隆重,… · 2026/9/25 18:03:30
ax:面向LLM智能体的Kubernetes原生执行基底协议 1. 项目概述:从“ax”这个代号说起,它到底是什么?如果你最近在云原生、AI工程化或分布式系统开发的圈子里刷到“ax”,大概率不是指某个新出的手机型号,也不是某款健身器械的缩写——而是正在悄然成型的一套面向智能体&… · 2026/9/25 18:03:24
LLM调用的最佳数据格式:TOON,成本直降50%|附Java使用指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 18:37:04
轻松学习Zephyr BSP: 40-公司 BSP 的完整生命周期 摘要:本文是 Zephyr BSP 系列(第 20~40 篇)的收束篇,系统梳理一个公司 SoC 从芯片定义到 BSP 可交付的完整生命周期。全文按 18 个阶段展开:从 SoC 规格、Company HAL、Zephyr SoC Port、Startup、中断控制器、时钟/复位,到 Devicetree、Binding、驱动、Kconfig、CMake、… · 2026/9/25 18:36:58
【AI智能体工程化实战06】用 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/9/25 18:36:52
数据治理第十五篇:五阶段标准实施路径——从制度上墙到长效运营的落地闭环 一、承接前文闭环:从「有规则、有考核」走向「能落地、能运营」在前两篇连载中,我们已经完成数据治理两大核心体系的搭建:第13篇构建了制度规范体系,解决了治理“有据可依”的问题;第14篇落地了KPI考核度量体系&#x… · 2026/9/25 18:36:40
简单聊聊 API 网关是什么:从 Cline 配置 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/9/25 18:35:50
Oracle / PL SQL: CURSOR FOR LOOP 使用与 TaoToken 配置排错指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 18:35:50
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37