始める無料で始める

初期化と活性化関数

勾配消失や勾配爆発といった不安定な勾配の問題は、深層ニューラルネットワークの学習でしばしば発生する課題です。本問と次の演習では、水の飲用適性の分類タスクで作成したモデルアーキテクチャを拡張し、これらの問題に強いモデルにしていきます。

最初のステップとして、He(Kaiming)初期化法を使って重みの初期化を改善します。そのために、torch.nn.initモジュール(initとしてインポート済み)から適切な初期化関数を呼び出してください。次に、既定のReLUから、より良いことが多いELUへ活性化関数を更新します。

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

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

コースを見る

演習の手順

  • fc1と同様に、2層目fc2weight属性に対してHe(Kaiming)初期化を呼び出してください。
  • 最終層で使用する活性化関数が異なる点を考慮して、3層目fc3weight属性にもHe(Kaiming)初期化を適用してください。
  • forward()メソッド内の活性化関数をreluからeluに更新してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(9, 16)
        self.fc2 = nn.Linear(16, 8)
        self.fc3 = nn.Linear(8, 1)
        
        # Apply He initialization
        init.kaiming_uniform_(self.fc1.weight)
        ____(____)
        ____(____, ____)

    def forward(self, x):
        # Update ReLU activation to ELU
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.relu(self.fc2(x))
        x = nn.functional.sigmoid(self.fc3(x))
        return x
コードを編集して実行