当前位置: 首页 > wzjs >正文

武汉h5网站建设seo推广软件下载

武汉h5网站建设,seo推广软件下载,品牌推广公司排名,网站建设设计制PyTorch 自动微分与完整手动实现对比一、手动实现前向传播1. 问题设定2.代码实现3. 手动计算梯度(反向传播)4. 参数更新(手动实现 optimizer.step ())二、 PyTorch 自动微分三、 总结一、手动实现前向传播 1. 问题设定 2.代码实现…

PyTorch 自动微分与完整手动实现对比

  • 一、手动实现前向传播
    • 1. 问题设定
    • 2.代码实现
    • 3. 手动计算梯度(反向传播)
    • 4. 参数更新(手动实现 optimizer.step ())
  • 二、 PyTorch 自动微分
  • 三、 总结

一、手动实现前向传播

1. 问题设定

在这里插入图片描述

2.代码实现

# 输入数据和标签
x = [1.0, 2.0]  # 输入特征
y = 3.0         # 真实标签# 模型参数(随机初始化)
w = [0.5, 0.5]  # 权重
b = 0.1         # 偏置# 前向传播计算预测值
y_pred = w[0] * x[0] + w[1] * x[1] + b# 计算损失(MSE)
loss = 0.5 * (y_pred - y) ** 2print(f"预测值: {y_pred}, 损失: {loss}")

3. 手动计算梯度(反向传播)

在这里插入图片描述

# 计算中间梯度
dL_dy_pred = y_pred - y  # ∂L/∂ŷ# 计算参数梯度
dL_dw1 = dL_dy_pred * x[0]  # ∂L/∂w1 = ∂L/∂ŷ * ∂ŷ/∂w1
dL_dw2 = dL_dy_pred * x[1]  # ∂L/∂w2 = ∂L/∂ŷ * ∂ŷ/∂w2
dL_db = dL_dy_pred         # ∂L/∂b = ∂L/∂ŷ * ∂ŷ/∂bprint(f"梯度: ∂L/∂w1 = {dL_dw1}, ∂L/∂w2 = {dL_dw2}, ∂L/∂b = {dL_db}")

4. 参数更新(手动实现 optimizer.step ())

使用梯度下降更新参数:

learning_rate = 0.01# 更新参数
w[0] = w[0] - learning_rate * dL_dw1
w[1] = w[1] - learning_rate * dL_dw2
b = b - learning_rate * dL_dbprint(f"更新后的参数: w = {w}, b = {b}")

二、 PyTorch 自动微分

import torch
import torch.nn as nn# ===== PyTorch 自动微分实现 =====
# 创建模型和数据
net = nn.Sequential(nn.Linear(2, 1))
net[0].weight.data = torch.tensor([[0.5, 0.5]])  # 初始权重
net[0].bias.data = torch.tensor([0.1])          # 初始偏置x_tensor = torch.tensor([[1.0, 2.0]], requires_grad=False)
y_tensor = torch.tensor([[3.0]])# 前向传播
y_pred_tensor = net(x_tensor)
loss_tensor = nn.MSELoss()(y_pred_tensor, y_tensor)# 反向传播
loss_tensor.backward()print("\nPyTorch 自动微分结果:")
print(f"预测值: {y_pred_tensor.item()}, 损失: {loss_tensor.item()}")
print(f"梯度: ∂L/∂w1 = {net[0].weight.grad[0, 0].item()}, "f"∂L/∂w2 = {net[0].weight.grad[0, 1].item()}, "f"∂L/∂b = {net[0].bias.grad.item()}")# ===== 手动实现结果 =====
print("\n手动实现结果:")
print(f"预测值: {y_pred}, 损失: {loss}")
print(f"梯度: ∂L/∂w1 = {dL_dw1}, ∂L/∂w2 = {dL_dw2}, ∂L/∂b = {dL_db}")

输出对比(假设学习率为 0.01)

PyTorch 自动微分结果:
预测值: 1.6, 损失: 0.98
梯度: ∂L/∂w1 = 1.4, ∂L/∂w2 = 2.8, ∂L/∂b = 1.4手动实现结果:
预测值: 1.6, 损失: 0.98
梯度: ∂L/∂w1 = 1.4, ∂L/∂w2 = 2.8, ∂L/∂b = 1.4

三、 总结

计算图的本质
无论使用 PyTorch 还是手动计算,梯度的流动路径都是由数学公式决定的。PyTorch 只是自动帮你构建了这个路径。
链式法则的核心作用
梯度从损失函数开始,通过链式法则逐层传递到每个参数。例如:

∂L/∂w1 = (∂L/∂ŷ) * (∂ŷ/∂w1) = (ŷ - y) * x1

PyTorch 的自动微分
当你调用 loss.backward() 时,PyTorch 会:

  • 自动追踪从 loss 到 weight 和 bias 的所有操作路径。
  • 对每个操作应用链式法则计算局部梯度。
  • 将最终梯度存储在 weight.grad 和 bias.grad 中。
http://www.dtcms.com/wzjs/296432.html

相关文章:

  • 关于网站开发的论文文献建网站的流程
  • 运动服饰网站建设预算舆情分析报告
  • 海口市建设局网站刷网站seo排名软件
  • 网站开发用主要软件百度快速排名用什
  • 怎么做符合seo的网站百度网盘电脑版官网
  • 杭州精品网站建设软文营销范文
  • dz仿网站头部单页网站排名优化
  • 代做毕业设计的网站seo渠道
  • 做照片书的模板下载网站好青岛关键词排名提升
  • 做网站被坑百度知道登录
  • 做微信推送网站网络营销比较好的企业
  • 广州住房建设部网站安装百度到桌面
  • 网站漂浮如何成为app推广代理
  • wordpress如何开启redis西安排名seo公司
  • 我要制作网站网站推广软件
  • 网站备案详细最新流程html+css网页制作成品
  • 天河网站+建设信科网络怎么做网页设计的页面
  • wordpress设置恢复安卓优化大师app下载安装
  • 建网站商城有哪些公司百度权重什么意思
  • wordpress个人博客主题站长工具seo综合查询怎么关闭
  • 安福网站建设域名服务器ip地址查询
  • 长沙有效的可以看的网站广州网站推广联盟
  • 论坛网站建设需要多少钱seo推广优化的方法
  • 哈尔滨信息工程学院地址重庆做seo外包的
  • 双流网站建设微信管理系统
  • 网站搭建开发站优云seo优化
  • 那些网站是php开发的百度下载app下载
  • 上海网站制作策划河南网站建设制作
  • 乐从网站建设百度首页纯净版怎么设置
  • 学做早餐网站网络推广外包怎么样