Pytorch|Pytorch神經網路基礎模型

柯頌竹
Programming with Data
Jan 13, 2021

nn.Module

nn.Module 為 PyTorch frameworks 裡最重要的 class 之一,可以說 PyTorch 中所有神經網絡模塊都是基於 nn.Module 所搭建。

當我們利用 nn.Module 打包了訓練參數(parameters) 與操作(forward propagation), backward 函數就會被自動實現(利用 automatic differentiation package -> torch.autograd)

查看model底下的modules

查看 model 內的 parameters (torch.nn.parameter.Parameter)

Backpropagation(.backward())

一開始要先確認所有 parameters 的 requires_grad 設定為 True。通常要拿來訓練的資料都會把requires_grad設定為 True,只有prediction資料會把requires_grad設定為False,因為prediction不需要做backpropagation,再加上如果設定為False,可以降低記憶體使用量

torch.nn.Sequential

我們可以將 sequential 看成是 nn.Module 的容器,方便我們將數個 Module 打包在一起,以便於之後重複利用。其操作基本上與 nn.Module 相同,以下示範三種主要方式將 Module 打包到 Sequential 內。模型架構如下:

  • input_shape = torch.Size([10,12])
  • 先經過一層nn.Linear(12,10)
  • 經過10層nn.Linear(10,10)
  • 最後經過nn.Linear(10,3)輸出
  • 每一個nn.Linear過完後要先經過nn.BatchNorm1d才能進到下一層,輸出層不用

第一種

第二種

第三種

torch.nn.ModuleList

操作就像是 python list,但其內的 module,parameters 是可以被追蹤的,也就是 nn.Module 有辦法去獲取 ModuleList 裡面的資訊。適用於連續好幾層一樣時,可以用它來建立迴圈,精簡程式碼。

nn.Module,nn.Sequential 與 nn.ModuleList 比較

--

--

柯頌竹
Programming with Data

熱愛自由行、參觀各種形式的展覽,踏上過20個國家的領土。歡迎詢問各種在歐洲自由行的問題。偶爾分享一下資料分析的讀書筆記。