ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI-For-Beginners 神经网络框架实战指南:TensorFlow 与 PyTorch 双层 API 原理、自动微分与过拟合控制

AI-For-Beginners 神经网络框架实战指南:TensorFlow 与 PyTorch 双层 API 原理、自动微分与过拟合控制 教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本文是 AI-For-Beginners 课程神经网络框架Frameworks de Redes Neuronales一节的深度技术指南。它将带领你理解为什么现代深度学习离不开张量运算与自动梯度计算系统对比 TensorFlow含 Keras与 PyTorch含 PyTorch Lightning的低层/高层 API 设计与互补用法并结合仓库内三个入门 Notebook 的源码级示例最终讲透机器学习中最关键的过拟合问题的成因、检测与预防方法。读完本文你将具备独立选型框架、读懂计算图、写出可运行的训练代码并诊断模型泛化问题的实战能力。一、训练神经网络需要哪两件事正如课程前几节自研神经网络框架所讲要高效训练神经网络我们本质上需要做两件事对张量Tensor进行运算例如乘法、加法以及 sigmoid、softmax 等函数计算计算所有表达式的梯度以便执行基于梯度下降Gradient Descent的参数优化。numpy库可以胜任第一件事但无法自动完成梯度计算。在上一节我们自己实现的框架中我们必须在backward方法里手工编写所有导数函数来完成反向传播——这非常繁琐且容易出错。理想的框架应该能自动计算我们所定义的任何表达式的梯度这正是 TensorFlow 与 PyTorch 等现代框架的核心价值。另一件重要的事是能够在 GPU 或其他专用计算单元如 TPU上执行计算。深度神经网络的训练需要大量计算将计算并行化到 GPU 上极其重要。✅ 术语解释并行化parallelize指把计算分布到多个设备上同时执行。二、两大主流框架与它们的双层 API体系目前最流行的两个神经网络框架是TensorFlow与PyTorch二者都在 CPU 和 GPU 上提供操作张量的低层 API在低层 API 之上又分别提供了高层 API——KerasTensorFlow 的高层封装和PyTorch LightningPyTorch 的高层封装。层级TensorFlowPyTorch低层 APITensorFlowPyTorch高层 APIKerasPyTorch Lightning低层 API计算图与自动微分低层 API允许开发者构建所谓的计算图Computational Graph。这张图定义了给定输入参数后如何计算输出通常是损失函数并且可以推送到 GPU 上执行如果可用。框架提供对计算图求导的函数来计算梯度进而用于优化模型参数。以 PyTorch 为例IntroPyTorch.ipynb 展示了自动微分的最小用法为张量设置requires_gradTruePyTorch 便会跟踪该张量参与的所有运算调用backward()之后梯度会自动写入.grad属性a torch.randn(size(2, 2), requires_gradTrue) b torch.randn(size(2, 2)) c torch.mean(torch.sqrt(torch.square(a) torch.square(b))) # 对 a 做一些运算 c.backward() # 调用 backward() 计算所有梯度 print(a.grad) # 查看 c 对 a 的梯度该 Notebook 还揭示了两个底层机制细节梯度是累积的PyTorch 会自动累积梯度。调用backward(retain_graphTrue)会保留计算图并把新梯度累加到grad字段上要清零需显式调用zero_()。训练循环里先zero_()再backward()的顺序由此而来。grad_fn记录求导规则每个被跟踪的张量都维护一个特殊函数grad_fn它按链式求导法则计算对应表达式的导数。例如用mean计算出的c其grad_fn指向MeanBackward0。如果需要对向量求导PyTorch 返回的是雅可比矩阵与给定向量v的乘积v^T·J即把v作为参数传给backward。在 TensorFlow 一侧IntroKerasTF.ipynb 使用tf.Variable表示待优化参数、GradientTape记录计算过程并自动求导且支持用tf.function把计算图编译加速、推送到 GPU 执行——代码本身无需改动即可在 CPU/GPU 间迁移。高层 API把网络看成层的序列高层 API把神经网络基本视为层的序列sequence of layers这让构建大多数神经网络变得非常容易。训练模型通常只需准备好数据然后调用一个fit函数即可完成全部工作。Keras 的典型流程IntroKeras.ipynb用keras.models.Sequential()创建模型 →add或列表方式声明Input/Dense/Activation层 →model.compile(...)指定损失函数、优化器与评估指标 →model.fit(...)训练。例如训练一个带 sigmoid 输出的单层感知机model keras.models.Sequential() model.add(keras.Input(shape(2,))) model.add(keras.layers.Dense(1)) model.add(keras.layers.Activation(keras.activations.sigmoid)) model.summary()Dense层即密集线性层等价于单层感知机输入尺寸与激活函数也可直接写进Densekeras.layers.Dense(1, input_shape(2,), activationsigmoid)。compile的三个关键要素是损失函数二分类用binary_crossentropy、优化器可用sgd或更先进的adam并可传keras.optimizers.SGD(learning_rate0.2)这类对象来精细调节学习率、评估指标分类任务常用acc/Accuracy。fit的核心参数包括x/y特征与标签、validation_data每个 epoch 执行验证、epochs训练轮数与batch_size小批量大小。PyTorch 的对应物IntroPyTorch.ipynbtorch.nn.Sequential以层序列定义网络torch.optim.SGD(net.parameters(), lr0.05)、torch.optim.Adam(...)提供内置优化器torch.utils.data.TensorDataset与DataLoader负责数据装载与按小批量切分net(x)由于nn.Module实现了__call__等价于net.forward(x)。课程给出的通用train函数体现了标准的前向 → 计算损失 →zero_grad→backward→optimizer.step循环。双层 API 如何协同工作理解两层 API 可以混用很重要。例如你可以用低层 API 开发自定义网络层结构再把它嵌入一个用高层 API 构建并训练的大网络中反过来你也可以用高层 API 把网络定义成层的序列再自己写一个低层训练循环来完成优化。两种 API 共享相同的基础概念且被设计为能够良好协作。三、课程学习路径如何选择框架本课程为 PyTorch 和 TensorFlow 都提供了大部分内容你可以选择偏好的框架只学习对应的 Notebook。不确定时可先查阅互联网上关于PyTorch vs. TensorFlow的讨论或两个框架都看一遍以获得更好的理解。课程尽可能使用高层 API 以保持简洁但同时也认为从零理解神经网络如何工作至关重要因此课程之初会先用低层 API 和张量展开。如果你想快速上手、不想花大量时间学习底层细节可以跳过低层部分直接进入高层 API 的 Notebook。API 层级Notebook低层 APITensorFlow Keras Notebook / PyTorch高层 APIKeras /PyTorch Lightning掌握框架之后课程就引出一个极其重要的概念——过拟合Overfitting。四、过拟合机器学习中必须理解透彻的概念考虑一个近似 5 个点图中用x表示的问题线性模型2 个参数非线性模型7 个参数训练误差 5.3训练误差 0验证误差 5.1验证误差 20左侧是一条不错的直线近似由于参数数量恰当模型正确抓住了点的分布规律训练误差与验证误差都较低。右侧的模型过于强大我们只有 5 个点而模型有 7 个参数它可以调整到恰好穿过所有点使训练误差降到 0。然而这阻止了模型理解数据背后的正确模式因此验证误差非常高20。可见在模型复杂度参数数量与训练样本数量之间取得正确平衡至关重要。过拟合为什么会发生训练数据不足模型过于强大参数过多输入数据中噪声过多。如何检测过拟合如上图所示过拟合可以通过训练误差非常低、而验证误差很高来识别。通常训练过程中训练误差与验证误差都会先一起下降然后到某个时刻验证误差可能停止下降并开始上升——这就是过拟合的信号提示我们应该在这个点停止训练或至少为模型做一个快照/检查点。如何预防过拟合如果发现过拟合发生可以做以下三件事之一增加训练数据量降低模型复杂度使用正则化技术例如课程后面会讲到的 Dropout完整技巧见 训练技巧文档。过拟合与偏差-方差权衡Bias-Variance Tradeoff过拟合实际上是统计学中一个更普遍问题——偏差-方差权衡Bias-Variance Tradeoff的特例。考虑模型误差的可能来源可以看到两类误差偏差误差Bias errors由算法未能正确捕捉训练数据之间的关系造成可能源于我们的模型不够强大欠拟合/Underfitting。方差误差Variance errors由模型去近似输入数据中的噪声而非有意义的关系造成过拟合/Overfitting。在训练过程中偏差误差随模型学会近似数据而下降方差误差则上升。因此必须停止训练——要么人工停止检测到过拟合时要么自动停止引入正则化——以防止过拟合。自测问题TensorFlow 与 PyTorch 的区别是什么过拟合与欠拟合的区别是什么五、Notebook 实战要点从张量到分类任务三个配套 Notebook 构成了本节的可执行实验主线它们之间是循序渐进的关系。1. 张量基础两个框架通用概念张量Tensor是多维数组非常适合表示各类数据400x400—— 黑白图片400x400x3—— 彩色图片16x400x400x3—— 16 张彩色图片的小批量25x400x400x3—— 一秒钟 25fps 的视频8x25x400x400x3—— 8 个一秒视频的小批量PyTorch 中可用torch.tensor([...])/torch.randn(...)创建张量运算与 numpy 一样逐元素执行并自动广播用.numpy()转回 numpy 数组TensorFlow 中对应tf.constant/tf.Variable与tf.reduce_sum。此外 PyTorch 还有原地操作约定以_结尾的方法如add_直接修改原张量否则返回新张量——这在w.data.sub_(lr * w.grad)这类参数更新代码中非常常见。2. GPU 计算一套代码双端运行PyTorch 的做法是在代码开头定义device cuda if torch.cuda.is_available() else cpu然后把所有张量通过.to(device)移到目标设备或在创建时传入device...。这样同一套代码在 CPU 与 GPU 上都能运行IntroPyTorch.ipynb 的线性回归示例演示了仅两处改动。TensorFlow 侧则通过tf.function与tf.Variable.assign在构建计算图时即完成同样的跨设备优化。3. 从梯度下降到真实分类两个 Notebook 都从用自动微分做最小化出发以f(x1,x2)(x1-3)²(x22)²为对象做 15 次梯度下降迭代x - lr * grad坐标逐步逼近最小值点(3,-2)随后用make_classification生成二分类数据分别训练单层感知机与多层网络PyTorch 分类要点二分类用torch.nn.functional.binary_cross_entropy_with_logits(z, y)等价于先sigmoid再二元交叉熵且自动对 batch 取平均网络可用torch.nn.Linear(2,1)单层、torch.nn.Sequential(Linear(2,5), Sigmoid(), Linear(5,1))多层或用继承torch.nn.Module的类实现任意复杂架构parameters()返回全部待优化参数。验证精度用torch.sigmoid(net(val_x)).flatten()0.5与标签比较后取均值。Notebook 结尾还有两项任务绘制训练/验证损失与精度曲线改用crossentropy_with_logits损失解决 MNIST 分类。Keras 分类要点训练前通常把输入特征归一化到[0,1]且只能用训练集的 min/range 去归一化测试集因为真实场景中只会知道训练集。多分类需要最后一层有C个神经元、最后一层激活函数用softmax、损失用交叉熵、标签用 one-hot 编码keras.utils.to_categorical或np.eye(C)[labels]。Keras 还支持sparse_categorical_crossentropy标签直接用整数类号无需 one-hot。对于多标签分类一个对象同时属于多个类别如猫和狗同时出现在图片里则改用sigmoid激活使每个类别概率独立落在 0~1 之间。课程用一张表总结了各种分类场景的配置这是面试与实战都高频出现的内容分类类型标签形式激活函数损失函数二分类第 1 类的概率sigmoidbinary crossentropy二分类one-hot 编码2 输出softmaxcategorical crossentropy多分类one-hot 编码softmaxcategorical crossentropy多分类类别编号softmaxsparse categorical crossentropy多标签one-hot 编码sigmoidcategorical crossentropy4. 课后实验Lab完成本节后配套实验要求用 PyTorch 或 TensorFlow 的单层与多层全连接网络解决两个分类问题详见实验说明与实验 NotebookIris 鸢尾花分类典型的表格型输入数据问题根据 4 个数值参数把鸢尾花分成 3 类MNIST 手写数字分类前几节已见过的经典问题。鼓励尝试不同的网络架构不同层数、神经元数量、激活函数去获得你能达到的最佳精度。六、结论与进阶方向在本节中你学习了 TensorFlow 与 PyTorch 这两大 AI 框架各种 API 之间的差异低层 API 通过计算图与自动微分提供精细控制适合研究新架构高层 API 以层序列 fit的方式极大简化常规网络的构建适合快速上手二者可以无缝结合使用。同时你学习了一个极其重要的主题——过拟合理解其成因数据不足、模型过强、噪声过大、检测手段训练误差低而验证误差高与预防方案增加数据、降低复杂度、正则化如 Dropout并把它放到偏差-方差权衡的更大框架下看待。在配套 Notebook 的末尾有若干任务动手完成它们是掌握本节的必经之路。接下来课程将带着框架能力进入下一节在后续的计算机视觉与 NLP 章节中这些框架知识将成为所有卷积网络、循环网络与 Transformer 实战的共同基础。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI-For-Beginners 神经网络框架指南TensorFlow 与 PyTorch 双栈实战与过拟合原理AI For Beginners 神经网络框架指南TensorFlow 与 PyTorch 双栈实战与过拟合原理 本篇技术指南基于开源课程 AI For Be教程人工智能机器学习深度学习AI-For-Beginners 神经网络框架实战指南PyTorch 与 TensorFlow 的双层 API 体系与过拟合防控AI For Beginners 神经网络框架实战指南PyTorch 与 TensorFlow 的双层 API 体系与过拟合防控 本篇指南以 AI For B教程人工智能机器学习深度学习generative-ai-for-beginners 神经网络框架实战TensorFlow 与 PyTorch 双层 API 解析及过拟合防控generative ai for beginners 神经网络框架实战TensorFlow 与 PyTorch 双层 API 解析及过拟合防控 本文以《ge教程人工智能大模型上一篇AIRI 实时语音聊天实现原理VAD STT LLM TTS 流式管线深度解析下一篇UltraX-Preview五大数据集怎么选UltraX-FineWeb vs AICC vs RedPajama完整选型清单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表