始める無料で始める

PyTorch のモデル

ここでは OOP アプローチでモデルのアーキテクチャを定義します。これは、モデルクラスを用意し、その中に次の 2 つのメソッドを実装することを意味します。

  • .__init__():使用する層を定義します。

  • forward():モデルが入力を受け取った後に何が起こるかを定義します。ここで、事前に定義した層へ入力を流します。

線形層を 3 つ、各層の後に ReLU 活性化を入れたモデルを作りましょう。最後の線形層の後だけはシグモイド活性化にします。これは、今回の水の飲用可否予測のような二値分類タスクに適しています。以下は、皆さんが見慣れているかもしれない nn.Sequential() を使ったモデル定義です。

net = nn.Sequential(
  nn.Linear(9, 16),
  nn.ReLU(),
  nn.Linear(16, 8),
  nn.ReLU(),
  nn.Linear(8, 1),
  nn.Sigmoid(),
)

このモデルをクラスとして書き直してみましょう!

この演習はコースの一部です

PyTorchによる中級ディープラーニング

コースを見る

演習の手順

  • .__init__() メソッドで、提示されたモデル定義に対応する次元で 3 つの線形層を定義し、それぞれを 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
コードを編集して実行