requires_grad_()與requires_grad的區別,同時pytorch的自動求導(AutoGrad)


1. 所有的tensor都有.requires_grad屬性,可以設置這個屬性.

    x = tensor.ones(2,4,requires_grad=True)

2.如果想改變這個屬性,就調用tensor.requires_grad_()方法:

   x.requires_grad_(False)

3.自動求導注意點:

  (1)  要想使x支持求導,必須讓x為浮點類型;

  (2) 求導,只能是【標量】對標量,或者【標量】對向量/矩陣求導;

  (3) 不是標量也可以用backward()函數來求導;

  (4)  一般來說,我是對標量求導,比如在神經網絡里面,我們的loss會是一個標量,那么我們讓loss對神經網絡的參數w求導,直接通過loss.backward()即可。

      但是,有時候我們可能會有多個輸出值,比如loss=[loss1,loss2,loss3],那么我們可以讓loss的各個分量分別對x求導,這個時候就采用:
        loss.backward(torch.tensor([[1.0,1.0,1.0,1.0]]))

      如果你想讓不同的分量有不同的權重,那么就賦予gradients不一樣的值即可,比如:
          loss.backward(torch.tensor([[0.1,1.0,10.0,0.001]]))

      這樣,我們使用起來就更加靈活了,雖然也許多數時候,我們都是直接使用.backward()就完事兒了。

  (5)一個計算圖只能backward一次,改善方法:retain_graph=True

    但是這樣會吃內存!,尤其是,你在大量迭代進行參數更新的時候,很快就會內存不足,memory out了。

引自:

  https://www.jianshu.com/p/a105858567df




 

  


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM