IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 1. Pytorch 自动求梯度 -> 正文阅读

[人工智能]1. Pytorch 自动求梯度

目录

一、概念

?????????二、Tensor

1. 创建Tensor并设置属性requires_grad=True

?2. Tensor运算操作

3. 复杂一点的运算

4. 使用函数requires_grad()来改变requires_grad属性

三、?梯度

1. 求解梯度

2. 中断梯度

3. 改变Tensor的数值,但不希望影响方向传播


????????

Pytorch 提供autograd包能够能够根据输入和向前传播过程自动构建计算图,并执行反向图,本文介绍如何使用autograd包来进行自动求梯度。

一、概念

????????autograd 包的第一个核心类是Tensor,如果将其属性 “.requires_grad” 设置为True,它将开始追踪(track)在其上的所有操作(意味着可以利用链式法则进行梯度传播)。完成计算后,调用函数“.backward()”完成所有梯度计算。此Tensor的体积将会累计到属性“.grad”中。

? ? ?【注意:在y.backward()时,如果y是标量,则不需要为backward()传入任何参数,否则,需要传入一个与y同形状的Tensor。】

???? 如果不想要被继续追踪,可以调用函数“.detech()”将Tensor从追踪记录中分离出来,这样梯度就传不过去了。此外,还可以用“with torch.no_grad()”将不想被追踪的操作代码块包裹起来。这种方法在模型评估的时候很常用,因为在评估的时候,我们不需要计算可训练参数(requires_grad=True)的梯度。

???? Autograde第二个重要的类Function,Tensor和Function互相结合可以构成一个记录有整个计算过程的有向无环图(DAG),每个Tensor都有一个“.grad_fu”属性,该属性即创建该Tensor的Function,也就是说,该Tensor是通过哪些运算得到的。若是,则grad_fu返回一个与这些运算相关的对象,否则为None。

二、Tensor

1. 创建Tensor并设置属性requires_grad=True

x = torch.ones(2, 2, requires_grad=True)
print(x)
print(x.grad_fun)

输出:

tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
None

?2. Tensor运算操作

y = x + 2
print(y)
print(y.grad_fn)

输出:

tensor([[3., 3.],
        [3., 3.]], grad_fn=<AddBackward>)
<AddBackward object at 0x1100477b8>

【注意:x是直接创建的,所以它没有“.grad_fu”,而y是通过加法创建的,所以他有一个<AddBackward>的grad_fu】

像x这种直接被创建的称为叶子节点,叶子节点对应的grad_fn是None

3. 复杂一点的运算

z = y * y * 3
out = z.mean()
print(z, out)

输出:

tensor([[27., 27.],
        [27., 27.]], grad_fn=<MulBackward>) tensor(27., grad_fn=
<MeanBackward1>)

4. 使用函数requires_grad()来改变requires_grad属性

a = torch.randn(2, 2) # 缺失情况下默认 requires_grad = False
a = ((a * 3) / (a - 1))
print(a.requires_grad) # False
a.requires_grad_(True)
print(a.requires_grad) # True
b = (a * a).sum()
print(b.grad_fn)

输出:

False
True
<SumBackward0 object at 0x118f50cc0>

三、?梯度

1. 求解梯度

??我们对以上所述的变量out 调用backward()计算梯度

out.backward() # 等价于 out.backward(torch.tensor(1.))
print(x.grad)

? 输出:

tensor([[4.5000, 4.5000],
        [4.5000, 4.5000]])

【注意:grad属性在反向传播中是累加的,所以一般会在反向传播之前将梯度清零。】

2. 中断梯度

? ? ? ? 再来看看一个中断梯度的栗子:

x = torch.tensor(1.0, requires_grad=True)
y1 = x**2
with torch.no_grad():
    y2 = x**3
y3 = y1 + y2

print(x.requires_grad)
print(y1, y1.requires_grad)
print(y2, y2.requires_grad)
print(y3, y3.requires_grad)

输出:

True
tensor(1., grad_fn=<PowBackward0>) True
tensor(1.) False
tensor(2., grad_fn=<ThAddBackward>) True

可以看到y2是没有grad_fn的,而且y2.requires_grad=Falsede ,然而y3是有grad_fn的。如果我们对将y3对x求梯度的话会怎么样?

y3.backward()
print(x.grad)

输出:

tensor(2.)

为什么是2呢?y3 = y1+y2 = x^2 + x^3, 当x = 1时,dy3/dx不应该是5么?实事上y2的定义被torch.no_grad()包裹,所以y2有关的梯度不会回传,只有y1有关的梯度才会被回传,即:x^2对x的梯度。

3. 改变Tensor的数值,但不希望影响方向传播

????????如果我们想要修改 tensor 的数值,但是?又不不希望被 autograd 记录(即不不会影响反向传播),那么我么可以对 tensor.data 进?行行操作。

x = torch.ones(1,requires_grad=True)
print(x.data) # 还是?一个tensor
print(x.data.requires_grad) # 但是已经是独?立于计算图之外
y = 2 * x
x.data *= 100 # 只改变了了值,不不会记录在计算图,所以不不会影响梯度传播
y.backward()
print(x) # 更更改data的值也会影响tensor的值
print(x.grad)

输出:

tensor([1.])
False
tensor([100.], requires_grad=True)
tensor([2.])

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:53:35  更:2021-09-03 11:55:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:52:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码