PyTorch torch.nn.Dropout2d 関数

PyTorch torch.nn 参考手册PyTorch torch.nn リファレンスマニュアル


torch.nn.Dropout2dPyTorch の2次元 Dropout モジュールです。

チャネル全体をランダムにゼロにし、畳み込み層の特徴マップに適しています。

関数定義

torch.nn.Dropout2d(p=0.5, inplace=False)

特徴

  • チャネル(channel)次元に沿ってランダムにゼロにします
  • 各サンプルの全チャネルで一貫したドロップアウトパターンを保持します

使用例

例1: 基本的な使い方

例

import torch
import torch.nn as nn

dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()

# 入力: batch=4, チャネル=8, 高さ=16, 幅=16
x = torch.ones(4, 8, 16, 16)

output = dropout2d(x)

# ドロップされたチャネル数を集計
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print("非ゼロチャネル比率:", non_zero_channels.mean().item())
print("約 0.5 のチャネルが保持されることを期待")

例2: Dropoutとの比較

例

import torch
import torch.nn as nn

dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)

# 入力
x = torch.randn(2, 4, 8, 8)

# Dropout: 単一の要素をランダムにゼロ化
out1 = dropout1d(x)
# Dropout2d: チャネルごとにゼロ化
out2 = dropout2d(x)

print("Dropout 形状:", out1.shape)
print("Dropout2d 形状:", out2.shape)

例3: CNNでの使用

例

import torch
import torch.nn as nn

# Dropout2d 付き CNN
model = nn.Sequential(
    nn.Conv2d(3, 64, 3, padding=1),
    nn.BatchNorm2d(64),
    nn.ReLU(),
    nn.Dropout2d(0.3),  # 特徴マップレベルでドロップ
    nn.Conv2d(64, 128, 3, padding=1),
    nn.BatchNorm2d(128),
    nn.ReLU(),
    nn.AdaptiveAvgPool2d(1),
    nn.Flatten(),
    nn.Linear(128, 10)
)

x = torch.randn(4, 3, 32, 32)
output = model(x)

print("入力:", x.shape, "-> 出力:", output.shape)

使用シーン

  • 畳み込みネットワーク: 特徴マップレベルの正則化
  • チャネル依存の低減

注意: Dropout2d はトレーニング時にチャネルごとにドロップし、評価時には機能しません。


PyTorch torch.nn 参考手册PyTorch torch.nn リファレンスマニュアル

その他の拡張