zoukankan      html  css  js  c++  java
  • pytorch自动求梯度

    概念

    Tensor 是这个包的核⼼类,如果将其属性 .requires_grad 设置为 True ,它将开始追踪(track)在其上的所有操作(这样就可以利⽤链式法则进⾏梯度传播了)。

    完成计算后,可以调 ⽤ .backward() 来完成所有梯度计算。此 Tensor 的梯度将累积到 .grad 属性中。

    注意在 y.backward() 时,如果 y 是标量,则不需要为 backward() 传⼊任何参数;否则,需要传⼊⼀个与 y 同形的 Tensor

    如果不想要被继续追踪,可以调⽤ .detach() 将其从追踪记录中分离出来,这样就可以防⽌将来的计 算被追踪,这样梯度就传不过去了。

    此外,还可以⽤ with torch.no_grad() 将不想被追踪的操作代码块包裹起来,这种⽅法在评估模型的时候很常⽤,因为在评估模型时,我们并不需要计算可训练参数 ( requires_grad=True )的梯度。

    Function 是另外⼀个很重要的类。 Tensor 和 Function 互相结合就可以构建⼀个记录有整个计算过程的有向⽆环图(DAG)。

    每个 Tensor 都有⼀个 .grad_fn 属性,该属性即创建该 Tensor 的 Function , 就是说该Tensor 是不是通过某些运算得到的,若是,则 grad_fn 返回⼀个与这些运算相关的对象,否则是None。

    例子一

     

     注意:grad在反向传播过程中是累加的(accumulated),这意味着每⼀次运⾏反向传播,梯度都会累 加之前的梯度,所以⼀般在反向传播之前需把梯度清零

    例子二

     如果想在中间修改一个值的参数,但是又不想被梯度记录下来,就使用.data来改变

  • 相关阅读:
    习题3.2三角形的知识1
    习题3.1三角形的知识2
    复习3.1三角形的知识1
    斜边和直角边公理、角的平分线11
    三角形全等的判定10
    全等三角形9
    你不知道的javascript(中卷)----读书笔记
    jquery----抽奖系统
    jQuery-----五子棋
    个人练手仿站
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13555526.html
Copyright © 2011-2022 走看看