PyTorchでのドロップアウトの実装:例を使用
ドロップアウトを使用してPyTorchモデルを正規化する方法をカバーする例、コードとインタラクティブな視覚化を完備
Created on January 11|Last edited on January 30
Comment
PyTorchでのドロップアウトの概要
このレポートでは、PyTorchモデルにドロップアウトを追加する例を示し、Weights & Biasesでモデルを追跡することにより、ドロップアウトがモデルのパフォーマンスに与える影響を観察します。
ドロップアウトとは何ですか?
ドロップアウトは、ニューラルネットのユニットを削除(または「ドロップアウト」)して、多数のアーキテクチャのトレーニングを同時にシミュレートする機械学習手法です。 重要なことに、ドロップアウトはトレーニング中の過剰適合の可能性を大幅に減らすことができます。

PyTorchモデルにドロップアウトを追加する例
1. ドロップアウトをPyTorchモデルに追加
PyTorchモデルにドロップアウトを追加するには、torch.nn.Dropoutクラスを使用すると非常に簡単です。このクラスは、ドロップアウト率(ニューロンが非アクティブ化される確率)をパラメーターとして受け取ります。
self.dropout = nn.Dropout(0.25)
非出力レイヤーの後にドロップアウトが適用できます。
2. モデルのパフォーマンスに対するドロップアウトの影響を観察します。
ドロップアウトの影響を観察するには、画像分類を行うようにモデルをトレーニングします。 最初に非正規化ネットワークを、次にDropoutを介して正規化されたネットワークについてトレーニングします。 モデルは、それぞれ15エポックのCifar-10データセットでトレーニングされます。
PyTorchモデルにドロップアウトを追加する例:
class Net(nn.Module):def __init__(self, input_shape=(3,32,32)):super(Net, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3)self.conv2 = nn.Conv2d(32, 64, 3)self.conv3 = nn.Conv2d(64, 128, 3)self.pool = nn.MaxPool2d(2,2)n_size = self._get_conv_output(input_shape)self.fc1 = nn.Linear(n_size, 512)self.fc2 = nn.Linear(512, 10)# Define proportion or neurons to dropoutself.dropout = nn.Dropout(0.25)def forward(self, x):x = self._forward_features(x)x = x.view(x.size(0), -1)x = self.dropout(x)x = F.relu(self.fc1(x))# Apply dropoutx = self.dropout(x)x = self.fc2(x)return x
トレーニング関数で wandb.log()を使用すると、モデルのパフォーマンスを自動的に追跡できます。 詳細については、ドキュメントを参照してください。
def train(model, device, train_loader, optimizer, criterion, epoch, steps_per_epoch=20):# Log gradients and model parameterswandb.watch(model)# loop over the data iterator, and feed the inputs to the network and adjust the weights.for batch_idx, (data, target) in enumerate(train_loader, start=0):# ...acc = round((train_correct / train_total) * 100, 2)# Log metrics to visualize performancewandb.log({'Train Loss': train_loss/train_total, 'Train Accuracy': acc})
Run set
2
PyTorchでドロップアウトを使用した場合の影響
- 正規化されていないネットワークは、トレーニングデータセットにすぐに適合しません。 without-dropoutの実行の検証損失が、ほんの数エポック後に大きく異なることに注意してください。 これは、より高い汎化誤差を説明します。
- ドロップアウト確率が25%の2つのドロップアウト層を使用したトレーニングは、モデルの過剰適合を防ぎます。 ただし、これによりトレーニングの精度が低下します。つまり、正規化されたネットワークをより長い期間トレーニングする必要があります。
- ドロップアウトはモデルの一般化を改善します。 トレーニングの精度は正規化されていないネットワークよりも低くなりますが、全体的な検証の精度は向上しています。 これにより、汎化誤差が低くなります。
これで、PyTorchモデルでのドロップアウトの使用に関するこの短いチュートリアルは終わりです。
Weights & Biases
Weights & Biases は、機械学習の実験を追跡するのに役立ちます。 私たちのツールを使用して、実行からハイパーパラメータをログに記録し、メトリックを出力してから、結果を視覚化して比較し、結果を同僚とすばやく共有します。
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.