Day 113 练习题 - PyTorch 基础
练习 1:Tensor 操作
创建一个 5x5 的随机 Tensor,完成以下操作:
- 计算每行的均值和每列的均值
- 找出所有大于 0.5 的元素,返回它们的索引
- 将 Tensor 重塑为 1x25 的向量
- 计算该向量的 L2 范数(使用 torch.norm())
要求:输出每一步的结果。
练习 2:自动求导验证
给定函数 $f(x, y, z) = (x + y^2) \cdot \sin(z)$,使用 PyTorch Autograd 计算在 $x=1, y=2, z=\pi$ 处的所有偏导数 $\frac{\partial f}{\partial x}$、$\frac{\partial f}{\partial y}$、$\frac{\partial f}{\partial z}$。
然后使用手动微分(链式法则)验证你的结果。
要求:
- 使用 requires_grad=True 的 Tensor
- 调用 .backward() 计算梯度
- 手动推导并验证
练习 3:梯度清零实验
不调用 grad.zero_(),连续运行 10 次反向传播,观察梯度的变化规律。
要求: - 绘制梯度值随迭代次数的变化图 - 解释为什么梯度会累积
练习 4:多元线性回归
将 Day 113 的线性回归代码扩展为多元线性回归(3 个特征):
- 生成 100 个样本,3 个特征,真实权重为 $w = [2, -1, 0.5]$,偏置 $b = 0.3$
- 使用矩阵乘法实现:y_pred = x @ w + b
- 训练 500 轮,学习率 0.01
要求: - 输出最终权重和偏置 - 计算最终的 MSE 损失
练习 5:GPU 加速对比(可选)
如果您的环境有 GPU: - 创建一个较大的 Tensor(如 10000x10000) - 分别在 CPU 和 GPU 上执行矩阵乘法 - 比较两种设备的运行时间
要求:
- 使用 torch.cuda.Event() 或 time 模块计时
- 报告加速比