pytoch總結autograd自動求導02

2021-09-22 01:29:04 字數 1290 閱讀 6868

1,pytorch中的自動求導機制—autograd模組

(1)神經網路求導的核心包是autograd,使用時匯入import torch.autograd

(2)定義tensor時格式如下 torch.tensor(data,dtype=none,device=none,requires_grad=none)

其中requires_grad標誌是否追蹤作用在該tensor的所有操作,如果為true,則在完成計算後,通過呼叫.backward()

來自動計算所有的梯度,所有梯度會被自動 累積 到.grad屬性上

(3)有時候不想跟蹤tensor的梯度,可以使用 .detach()方法

或者可以將多有**包括在 with.torch.no_grad():中,----在評估模型時特別有用

(4)檢視屬性: tensor.requires_grad

修改屬性: tensor.requires_grad_(true/false)

獲取求得的導數: tensor.grad

反向傳播自動求導 .backward

求導的限制: 標量對標量

標量對矩陣

(5)對於tensor.backward(),

如果tensor是乙個標量,則不用為.backward()指定引數,tensor.backward() 等價於 tensor.backward(torch.tensor(1))

如果tensor有更多的元素,則需要為.backward()指定gradients引數,gradients引數是乙個和tensor同維度的張量,可用來代表

各個標量在求導時候的權重

2,torch搭建神經網路的步驟

(1)定義神經網路的結構

(2)通過神經網路計算輸入

(3)計算損失函式

(4)將梯度反向傳播回網路的引數

(5)更新網路的引數, weight = weight - learning_rate*gradient

3,(1)torch中搭建的神經網路都是使用類來實現的,所有自己搭建的神經網路的類都必須繼承torch.nn.module這個基類

nn.module中包含了各個層,在自己的類中需要定義各種超引數,比如網路的層數,網路的尺寸,在實際中,必須

在自己的類的建構函式中呼叫nn.module的建構函式,一般有兩種方式:

super(子類名,self).init()

nn.module.init(self)

自己定義的網路類,一般需要在建構函式中定義 可以學習的引數, 在forward中使用非學習引數

pytoch 使用float64訓練

pytorch預設使用單精度float32訓練模型,原因在於 使用float16訓練模型,模型效果會有損失,而使用double float64 會有2倍的記憶體壓力,且不會帶來太多的精度提公升。本人,最近遇到需要使用double資料型別訓練模型的情況,具體實現需要把模型的權重引數資料型別和輸入資料型...

Pytoch安裝以及虛擬環境建立

2 anaconda安裝 在終端開啟anaconda的資料夾,執行命令 bash anaconda3 2020.02 linux x86 64.sh 然後一直回車,期間會出現兩次y n?選擇,統一選擇yes即可。接下來檢測是否安裝成功。重新開啟乙個終端,通過輸入conda v python3,看是否...

總結之總結

這週都在為前一段時間的工作進行總結,雖然沒有時間壓力,但是還是讓我感覺煩惱,特別是在開始階段,面對一堆資料無從下手,時間過半,還是沒有清晰的思路。現在總結雖然寫完了,但還是有些不爽,想在這裡吐吐槽,希望日後的總結工作能夠更加順利一些。現在回想起來,在總結開始的時候,我有幾個疑惑,這次總結的目標是什麼...