開始使用免費開始

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.fc1self.fc2self.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
編輯並執行程式碼