PyTorch 模型
你將使用 OOP 的方式來定義模型架構。回想一下,這需要建立一個模型類別,並在其中定義兩個方法:
.__init__():在這裡定義你要使用的各個層;forward():在這裡定義模型接收到輸入後會發生什麼事;也就是把輸入依序傳過你先前定義的各層。
我們來建立一個包含三個線性層與 ReLU 激發的模型。在最後一個線性層之後,改用 sigmoid 激發,這很適合用於像本題「水質可飲用性」這類的二元分類任務。以下是使用 nn.Sequential() 定義的等價模型,你可能對這種寫法更熟悉:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
現在把這個模型改寫成類別吧!
本練習屬於課程
Intermediate Deep Learning with PyTorch
練習說明
- 在
.__init__()方法中,依照提供的模型定義設定三個線性層的維度,並分別指定給self.fc1、self.fc2、self.fc3。 - 在
forward()方法中,將模型輸入x依序傳過所有層,並記得在各層輸出後加入對應的激發函式,做法與第一層已示範的方式相同。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
# Define the three linear layers
self.fc1 = ____
self.fc2 = ____
self.fc3 = ____
def forward(self, x):
# Pass x through linear layers adding activations
x = nn.functional.relu(self.fc1(x))
x = ____
x = ____
return x