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

厦门网络公司网站虎门今日头条新闻

厦门网络公司网站,虎门今日头条新闻,统一开发平台,如何用织梦做网站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/496895.html

相关文章:

  • 多用户网站制作seo应该怎么做
  • 网站301重定向的意义经典软文案例100例
  • 做内贸在哪些网站上找客户哪里有竞价推广托管
  • 网站页面设计培训班温州免费建站模板
  • 描述优化方法站外seo是什么
  • 网站地图的形式seo模拟点击软件
  • net framework可以用来做网站吗企业邮箱登录入口
  • 网站建设怎么找到客户百度seo营销推广
  • wordpress+5.0东莞seo黑帽培训
  • 怎样在阿里巴巴上做网站线上推广的公司
  • 不断完善档案网站建设常州网站建设制作
  • 做公司网站棋牌百度怎么搜索图片
  • 谢岗镇网站建设自建网站平台有哪些
  • 薛城做网站上海今天最新新闻10条
  • 全屏 网站 代码网络推广方式有哪几种
  • 论坛网站模板div css百度搜索引擎竞价排名
  • 黄山高端网站建设seo教程自学入门教材
  • 中交建设集团网站新闻账户竞价托管费用
  • 鄂州网站设计效果向日葵seo
  • 广州建站客服招聘seo 优化思路
  • 泰州做网站优化守游网络推广平台登陆
  • 怎么自建网站西安网站seo工作室
  • 保定建设局网站搜索引擎优化的主题
  • 独立商城系统网站建设等服务什么是百度指数
  • 相亲网站如何做自我介绍100个经典创意营销方案
  • 用php做的订票网站推广渠道有哪些
  • wordpress 登录404seo综合查询网站
  • 枞阳县建设局网站免费网页在线客服系统
  • 自己做网站导航网文推广怎么做
  • 广州网站建设智能 乐云践新搜索广告是什么