Pytorch|Pytorch神經網路基礎模型
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 裡面的資訊。適用於連續好幾層一樣時,可以用它來建立迴圈,精簡程式碼。