
第 22 章练习与参考答案 关于《AI 零基础 36 讲》课后训练与正式讲解配套学习本篇是《AI 零基础 36 讲》的配套课后训练与对应章节的正式讲解一起使用。整个系列面向初学者从日常 AI使用逐步进入编程、模型训练和大模型应用开发。✍️先独立作答再核对答案训练围绕本章知识安排概念判断、结果分析或动手任务并提供参考答案与解释。建议先读完对应的正式文章再独立作答遇到困难时回看相关例子最后核对答案。代码题请亲手运行观察程序输出确认自己能解释结果、发现错误并完成修复。做完一道题也要弄清答案为什么成立。练习NumPy 数组通过torch.from_numpy转成张量后改张量为什么会影响原数组怎样创建独立副本32 条记录、每条一个输入和一个目标输入与目标应该分别是什么形状参数 w 为 2损失(3w - 1)²单次梯度多少没有清除连续计算两次后多少三条 x 为 -1、0、1改成y 3x - 2只修改标签再训练权重与偏置接近多少model.eval()会不会关闭求导当前线性层为何两种模式输出相同本章 CPU 版 CUDA 显示 False如何完成训练九条测试结果能否代表任意输入范围参考答案第一题共享内存双方修改互相影响。张量的.clone()可以得到独立副本。可观察原数组第一项变化来核对不靠打印张量对象的地址判断。第二题输入与目标都为(32, 1)。目标误写成(32,)时可能广播出错误配对需要在损失前检查。第三题单次梯度为 30两次累积为 60。每轮独立更新时计算前调用优化器的zero_grad。本章错误与修复实际演示了这个数值。第四题标签为 -5、-2、1权重接近 3偏置接近 -2。importtorch torch.manual_seed(42)xtorch.tensor([[-1.0],[0.0],[1.0]])ytorch.tensor([[-5.0],[-2.0],[1.0]])modeltorch.nn.Linear(1,1)optimizertorch.optim.SGD(model.parameters(),lr0.1)loss_fntorch.nn.MSELoss()for_inrange(120):optimizer.zero_grad(set_to_noneTrue)lossloss_fn(model(x),y)loss.backward()optimizer.step()print(权重,model.weight.detach().item())print(偏置,model.bias.detach().item())assertabs(model.weight.detach().item()-3)1e-4assertabs(model.bias.detach().item()2)1e-4第五题评估模式仍可求导用no_grad()控制推理记录。当前只有 Linear它没有 Dropout 或 BatchNorm 的模式差异仍显式切换便于后续扩展。第六题选择--device cpu正常运行CPU 不要求 CUDA。测试只覆盖同一原创生成范围九条样本很少也没有检验新的分布不能作范围外效果保证。补充核对可以让 PyTorch 重现前一章梯度。fromexamples.torch_coreimportautograd_demo resultautograd_demo()assertresult[prediction]5.5assertresult[loss]2.25assertresult[gradients][b2]3.0print(result)