PyTorch學習筆記之神經網絡包 nn 和優化器 optim


torch.nn 是專門爲神經網絡設計的模塊化接口。構建於 Autograd 之上,可用來定義和運行神經網絡。下面介紹幾個常用的類:

注: torch.nn 爲了方便使用,將它設置成 nn 的別名。

除了 nn 別名以外,我們還引用了 nn.functional,這個包中包含了神經網絡中使用的一些常用的函數,這些函數的特點是,不具有可學習的參數(ReLu, pool, DropOut 等),這些函數可以放在構造函數中,也可以不放,但是這裏建議不放。

一般情況下,我們將 nn.functional 設置爲大寫的 F, 這樣縮寫方便調用

 

  • 定義一個網絡

PyTorch 中已經爲我們準備好了現成的網絡模型,只要繼承 nn.module,並實現它的 forward 方法, PyTorch 會根據 autograd,自動實現 backward 函數,在 forward 函數中可使用任何 tensor 支持的函數,還可以使用 if、for 循環、print、 log 等 Python 語法,寫法和標準的 Python 寫法一致。

 

網絡的可學習參數通過 net.parameters() 返回。

 

net.named_parameters 可以同時返回可學習的參數及名稱。

 

forward 函數的輸入和輸出都是 Tensor。

 

在反向傳播前,先要將所有參數的梯度清零。

 

注意 :torch. nn 只支持 mini-batches,不支持一次只輸入一個樣本,即一次必須是一個 batch。

也就是說,就算我們輸入一個樣本,也會對樣本進行分批,所以,所有的輸入都會增加一個維度,我們對比下剛纔的nn中定義爲3維,但是我們人工創建時多增加了一個維度,變爲了4 維,最前面的 1 即爲 batch-size。

 

  • 損失函數

在 nn 中 PyTorch 還預製了常用的損失函數,下面我們用 MSELOSS 用來計算均方誤差

 

  • 優化器

在反向傳播中計算完所有參數的梯度後,還需要使用優化方法來更新網絡的權重和參數,例如隨機梯度下降法(SGD)的更新策略如下:

 torch.optim中實現大多數的優化方法,例如:RMSProp、Adam、SGD 等,下面我們使用SGD 做個簡單的樣例:

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章