【动手学深度学习】part8-线性规划

依据《动手学深度学习》理解并复现“线性规划”章节代码


一、背景

  • 利用线性规划模型进行拟合,解决预测问题。
  • 在这章的学习过程中,能够很好地理解SGD优化算法的实现过程,这也是深度学习最经典最常用的优化算法。
  • 并且能够建立深度学习的一个使用框架,即:
    ①构建模型(设置网络层数等)
    ②构建损失函数(MSE均方误差等)
    ③设置超参数(学习率learning_rate、批量大小batch_size、迭代次数num_epoch等)
    ④迭代优化(SGD等)

(个人理解:数学本质上就是一个优化问题,目标为最小化损失函数)

二、流程

  1. 前向传播:net(X, w, b)计算模型的预测输出。
  2. 计算损失:loss()计算预测输出与真实标签之间的均方误差损失。
  3. 反向传播:调用 .backward() 计算梯度。
  4. 更新参数:使用随机梯度下降(SGD)更新参数。with torch.no_grad()
    用于临时禁用梯度计算,因为参数更新不需要计算梯度。
  5. 清零梯度:在每次迭代结束后,.grad.zero_()清零参数的梯度,以便在下一次迭代中重新计算梯度。
  6. 打印损失:每1个epoch打印一次损失值,以便观察训练过程。

三、代码版本-v1(从零开始)

  • 基于上述流程的代码复现及注释
import random
import torch
from d2l import torch as d2l

def synthetic_data(w, b, num_examples):  
    """生成 y = Xw + b + 噪声。"""
    X = torch.normal(0, 1, (num_examples, len(w))) #均值为0,方差为1的随机数
    y = torch.matmul(X, w) + b
    y += torch.normal(0, 0.01, y.shape) #随机噪声
    return X, y.reshape(-1, 1)

#自定义真实w,b
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
print('features:', features[0], '\nlabel:', labels[0])

#绘制生成的真值数据
d2l.set_figsize()
d2l.plt.scatter(features[:, 1].detach().numpy(),
                labels
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值