pytorch中的torch.autograd.backward()

本文详细介绍了PyTorch中torch.autograd.backward()函数的使用,包括参数解析和实例演示。通过一个具体的例子展示了如何利用backward()计算向量y关于向量x的梯度,理论值与实验结果一致,证实了反向传播的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

backward()用法介绍

深度学习中反向传播尤为重要,pytorch中的torch.autograd.backward()函数实现了反向传播的功能。具体相关的参数如下所示:

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None)

  • tensors指定需要被求梯度的张量
  • grad_tensors通常是对应张量的每个元素的梯度
  • retain_graph释放或者保留用于计算梯度的计算图
  • create_graph用于计算高阶导数

给定三个向量分别是y=(y1,y2,⋯ ,y3),x=(x1,x2,⋯ ,x3),a=(a1,a2,⋯ ,a3)\boldsymbol{y}=(y_1,y_2,\cdots,y_3),\quad\boldsymbol{x}=(x_1,x_2,\cdots,x_3),\quad \boldsymbol{a}=(a_1,a_2,\cdots,a_3)y=(y1,y2,,y3),x=(x1,x2,,x3),a=(a1,a2,,a3)利用backward()\mathrm{backward}()backward()y\boldsymbol{y}y关于x\boldsymbol{x}x的梯度的命令为

Jacobian-vecotr = y.backward(torch.FloatTensor([a]))

返回的结果是一个向量,并且每个分量值的数学计算结果为Jacobian_vector(i)=a1y1xi+a2y2xi+a3y3xi+⋯+amymxi(1)\tag{1}\mathrm{Jacobian\_vector(i)}=a_1 \frac{y_1}{x_i}+a_2\frac{y_2}{x_i}+a_3 \frac{y_3}{x_i}+\cdots+a_m \frac{y_m}{x_i}Jacobian_vector(i)=a1xiy1+a2xiy2+a3xiy3++amxiym(1)

实例讲解

假定令x=(x1,x2)=(2,3)\boldsymbol{x}=(x_1,x_2)=(2,3)x=(x1,x2)=(2,3)y=(x12,x22)\boldsymbol{y}=(x_1^2,x^2_2)y=(x12,x22),则有∂y∂x=(2x1002x2)=(4006)\frac{\partial \boldsymbol{y}}{\partial\boldsymbol{x}}=\left(\begin{array}{cc}2x_1&0\\0&2x_2\end{array}\right)=\left(\begin{array}{cc}4&0\\0&6\end{array}\right)xy=(2x1002x2)=(4006)根据公式(1)可知,如下命令的结果理论值为

y.backward(torch.FloatTensor([1,1])) => x.grad=(4+0,0+6)=(4,6)
y.backward(torch.FloatTensor([1,0])) => x.grad=(4+0,0+0)=(4,0)
y.backward(torch.FloatTensor([0,1])) => x.grad=(0+0,0+6)=(0,6)

为了验证如上结果,具体的程序代码如下所示:

import torch
from torch.autograd import Variable
FloatTensorList = [torch.FloatTensor([1,1]),torch.FloatTensor([1,0]),torch.FloatTensor([0,1])]
for item in FloatTensorList:
	x = Variable(torch.tensor([2.0 , 3.0]), requires_grad = True)
	y = x**2
	y.backward(item, retain_graph=True)
	print(x.grad)

运行的结果为:

tensor([4., 6.])
tensor([4., 0.])
tensor([0., 6.])

由此可以发现,理论值与实验结果值一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道2024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值