初期化と活性化関数
勾配消失や勾配爆発といった不安定な勾配の問題は、深層ニューラルネットワークの学習でしばしば発生する課題です。本問と次の演習では、水の飲用適性の分類タスクで作成したモデルアーキテクチャを拡張し、これらの問題に強いモデルにしていきます。
最初のステップとして、He(Kaiming)初期化法を使って重みの初期化を改善します。そのために、torch.nn.initモジュール(initとしてインポート済み)から適切な初期化関数を呼び出してください。次に、既定のReLUから、より良いことが多いELUへ活性化関数を更新します。
この演習はコースの一部です
PyTorchによる中級ディープラーニング
演習の手順
fc1と同様に、2層目fc2のweight属性に対してHe(Kaiming)初期化を呼び出してください。- 最終層で使用する活性化関数が異なる点を考慮して、3層目
fc3のweight属性にも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