Pytorch的自动微分---自动微分实现梯度下降

# 使用pytorch的自动微分实现函数f(x)=x^2+y^2极小值的梯度下降算法
import torch


def f(x, y):
    return x ** 2 + y ** 2


x = torch.tensor([1.1], requires_grad=True)
y = torch.tensor([2.1], requires_grad=True)
n = 100
alpha = 0.05

for i in range(1, n + 1):
    z = f(x, y)
    z.backward()
    x.data -= alpha * x.grad.data
    y.data -= alpha * y.grad.data
    x.grad.zero_()
    y.grad.zero_()
    print(f"循环次数{i}",
          f"自变量x的值{x.item():.3f}",
          f"自变量y的值{y.item():.3f}",
          f"函数值{z.item():.3f}")
# x.item() 和 y.item() 方法被用来从 PyTorch 张量(tensors)中提取原始的数值数据。
# 当您对一个张量调用 .item() 方法时,它会将这个张量转换成一个 Python 原生数组

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch是一个基于Python的科学计算库,它是一个用于深度学习的开源框架,具有高度灵活性和可扩展性。PyTorch的一个关键特性是它的自动微分功能,也称为自动求导功能。自动微分PyTorch中非常强大的功能,它可以自动计算函数的导数,因此可以为深度学习中的反向传播算法提供支持。 在PyTorch中,我们可以使用torch.autograd包实现自动微分。该包提供了Variable类,它是一个包装Tensor的类,它不仅保存了Tensor的值,还保存了梯度信息。我们可以在Variable上执行操作,并使用.backward()方法计算梯度。 下面是PyTorch自动微分的基本示例代码: ```python import torch x = torch.tensor([3.0], requires_grad=True) y = x ** 2 + 2 * x + 1 # 计算梯度 y.backward() # 输出梯度 print(x.grad) ``` 在这个例子中,我们定义了一个变量x,并将requires_grad设置为True,以指示PyTorch需要计算x的梯度。然后我们定义了一个函数y,该函数对x进行操作。我们使用backward()方法计算y相对于x的梯度,并使用x.grad输出梯度。 这里需要注意的是,只有requires_grad=True的变量才会被计算梯度。如果我们想要计算多个变量的梯度,可以将它们放在一个元组中,然后调用backward()方法。 ```python import torch x = torch.tensor([3.0], requires_grad=True) y = torch.tensor([4.0], requires_grad=True) z = x ** 2 + y ** 2 # 计算梯度 z.backward() # 输出梯度 print(x.grad) print(y.grad) ``` 在这个例子中,我们定义了两个变量x和y,并将requires_grad设置为True,以指示PyTorch需要计算它们的梯度。然后我们定义了一个函数z,该函数对x和y进行操作。我们使用backward()方法计算z相对于x和y的梯度,并使用x.grad和y.grad输出它们的梯度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YLTommi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值