Skip to main content

PyTorchでのドロップアウトの実装:例を使用

ドロップアウトを使用してPyTorchモデルを正規化する方法をカバーする例、コードとインタラクティブな視覚化を完備
Created on January 11|Last edited on January 30

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 dropout
self.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 dropout
x = 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 parameters
wandb.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 performance
wandb.log({'Train Loss': train_loss/train_total, 'Train Accuracy': acc})



Run set
2


PyTorchでドロップアウトを使用した場合の影響

  • 正規化されていないネットワークは、トレーニングデータセットにすぐに適合しません。 without-dropoutの実行の検証損失が、ほんの数エポック後に大きく異なることに注意してください。 これは、より高い汎化誤差を説明します。
  • ドロップアウト確率が25%の2つのドロップアウト層を使用したトレーニングは、モデルの過剰適合を防ぎます。 ただし、これによりトレーニングの精度が低下します。つまり、正規化されたネットワークをより長い期間トレーニングする必要があります。
  • ドロップアウトはモデルの一般化を改善します。 トレーニングの精度は正規化されていないネットワークよりも低くなりますが、全体的な検証の精度は向上しています。 これにより、汎化誤差が低くなります。
これで、PyTorchモデルでのドロップアウトの使用に関するこの短いチュートリアルは終わりです。

Weights & Biases

Weights & Biases は、機械学習の実験を追跡するのに役立ちます。 私たちのツールを使用して、実行からハイパーパラメータをログに記録し、メトリックを出力してから、結果を視覚化して比較し、結果を同僚とすばやく共有します。

Iterate on AI agents and models faster. Try Weights & Biases today.