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