Pytorch学习笔记(二)—— 梯度计算

Pytorch的梯度计算

Pytorch支持在创建tensor时指明requires_grad参数,当该参数为True时,Pytorch会自动追踪对该tensor进行的所有操作,每次操作的结果会具有grad_fn属性来记录所做的操作:

# 创建一个张量,并设置需要计算梯度以对它的计算进行追踪
x = torch.ones(2, 2, requires_grad=True)
print(x)

# 进行一次张量操作
y = x + 2
print(y)
print(y.grad_fn)  # y作为一次操作的结果,因此具有grad_fn属性

# 对y进行更多操作
z = y * y * 3
out = z.mean()
print(z, out)

运行结果:
在这里插入图片描述
使用requires_gard_()方法可以就地改变现有tensor的require_grad标志。若未给出输入标志,默认为False:

# .requires_grad_()方法可以就地改变现有张量的require_grad标志。若未给出输入标志,则默认为False
a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b.grad_fn)

运行结果:
在这里插入图片描述
设置require_grad参数为True后,执行反向传播(backward),Pytorch会自动计算对应tensor的梯度。举个简单的例子:

import torch

x = torch.ones(2, 2, requires_grad=True)  # 设置需要计算梯度
y = x + 2
z = y * y * 3
out = z.mean()  # 计算平均值
out.backward()  # 执行反向传播
print(x.grad)

"""
    这里相当于  out = 1/4 * 3 * (x + 2)^2,则dout/dx = 3/2 * (x + 2),当x=1时,dout/dx = 9/2 = 4.5
"""

运行结果:
在这里插入图片描述
关于Pytorch计算梯度的方法,可参考:
Pytorch的自动求导机制详解

对设置需要计算梯度的张量,可以将不需要计算梯度的操作包含在torch.no_grad()代码块中,它不会影响张量本身的require_grad属性:

import torch

x = torch.randn(3, requires_grad=True)
print(x.requires_grad)
print((x ** 2).requires_grad)

with torch.no_grad():
    print((x ** 2).requires_grad)
    print(x.requires_grad)

结果如下:

使用detach()方法可以获得内容相同但不需要计算梯度的新张量:

import torch

x = torch.randn(3, requires_grad=True)
y = x.detach()  # 使用.detach()获得具有相同内容但不需要计算梯度的新Tensor
print(x.requires_grad)
print(y.requires_grad)
print(y.eq(x).all())  # 验证y与x内容相同

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pytorch是机器学习中的一个重要框架,它与TensorFlow一起被认为是机器学习的两大框架。Pytorch学习可以从以下几个方面入手: 1. Pytorch基本语法:了解Pytorch的基本语法和操作,包括张量(Tensors)的创建、导入torch库、基本运算等\[2\]。 2. Pytorch中的autograd:了解autograd的概念和使用方法,它是Pytorch中用于自动计算梯度的工具,可以方便地进行反向传播\[2\]。 3. 使用Pytorch构建一个神经网络:学习使用torch.nn库构建神经网络的典型流程,包括定义网络结构、损失函数、反向传播和更新网络参数等\[2\]。 4. 使用Pytorch构建一个分类器:了解如何使用Pytorch构建一个分类器,包括任务和数据介绍、训练分类器的步骤以及在GPU上进行训练等\[2\]。 5. Pytorch的安装:可以通过pip命令安装Pytorch,具体命令为"pip install torch torchvision torchaudio",这样就可以在Python环境中使用Pytorch了\[3\]。 以上是一些关于Pytorch学习笔记,希望对你有帮助。如果你需要更详细的学习资料,可以参考引用\[1\]中提到的网上帖子,或者查阅Pytorch官方文档。 #### 引用[.reference_title] - *1* [pytorch自学笔记](https://blog.csdn.net/qq_41597915/article/details/123415393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Pytorch学习笔记](https://blog.csdn.net/pizm123/article/details/126748381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值