backward怎么计算的是torch.tensor(2.0, requires_grad=True)变量的梯度

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 一个参数 w = 2
w = torch.tensor(2.0, requires_grad=True)
# 预测值
y_pred = w * 3  # 6
# 真实值
y_true = torch.tensor(10.0)
# 损失 = (预测 - 真实)^2
loss = (y_pred - y_true) ** 2  # (6-10)^2 = 16

loss.backward()  # 反向传播

print(w.grad)  # 打印梯度

因为requires_grad=True,有了这个标记,loss就会把w看作参数,loss.backward就会求梯度,并保存到w.grad中

保存到w.grad中怎么实现的?python哪怕不输入w,也可以修改w的参数

python 复制代码
class Param:
    def __init__(self, value):
        self.value = value
        self.grad = 0

# 可变对象,保存梯度
w = Param(2.0)

# 定义 loss 函数,直接用 w
def compute_loss():
    y_pred = w.value * 3
    y_true = 10
    loss = (y_pred - y_true) ** 2
    return loss

# 反向传播模拟
def backward(loss):
    # 直接访问 w 对象,修改 w.grad
    w.grad = 2 * 3 * (w.value*3 - 10)  

loss = compute_loss()
backward(loss)
print(w.grad)  # 24

自定义的类想要直接计算乘法需要写函数

python 复制代码
class Param:
    def __init__(self, value):
        self.value = value

    def __mul__(self, other):
        return self.value * other   # 定义 w * 3 的行为

    def __rmul__(self, other):
        return other * self.value   # 定义 3 * w 的行为

w = Param(2.0)
print(w * 3)   # 输出 6.0
print(3 * w)   # 输出 6.0

更新参数也不用传入该参数

python 复制代码
    # 用梯度更新参数 w
    with torch.no_grad():  # 禁止 autograd 跟踪
        w -= lr * w.grad   # w = w - lr * grad

    # 梯度用完要清零,不然会累积
    w.grad.zero_()
相关推荐
救救孩子把10 分钟前
AI面试八股文-21_21-多模态Agent面试题-Vision-Language-Agent
人工智能·面试·职场和发展·llava·多模态agent
今年下半年13 分钟前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Jlzn888817 分钟前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
u13013024 分钟前
GitHub 热榜项目:日榜(2026-10-17)
人工智能·github
流烟默29 分钟前
MCP第 5 篇:用 Spring AI 写 MCP:注解、自动配置、ChatClient 集成
人工智能·spring·mcp封装
康实训31 分钟前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
misty youth37 分钟前
Agent-智能体工程方法论
人工智能·ai·llm·agent·智能体
lisw0539 分钟前
制造业信息化:现代工业的发展趋势!
大数据·网络·人工智能
AllData公司负责人41 分钟前
AllData搭建大模型资产中台集成开源项目BISHENG/Crater/Coze-Studio/Coze-Loop/DataFIow,建设AI大模型开发底座
大数据·人工智能·开源·bisheng·coze-studio·crater·datafiow