PyTorch torch.nn.Dropout2d Funktion
PyTorch torch.nn Referenzhandbuch
torch.nn.Dropout2dist ein zweidimensionales Dropout-Modul in PyTorch.
Es setzt ganze Kanäle zufällig auf null, geeignet für Feature-Maps von Faltungsschichten.
Funktionsdefinition
torch.nn.Dropout2d(p=0.5, inplace=False)
Funktionen
- Zufälliges Nullsetzen entlang der Kanal-Dimension
- Alle Kanäle jeder Stichprobe behalten ein konsistentes Dropout-Muster bei
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
import torch
import torch.nn as nn
dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()
# Eingabe: batch=4, channels=8, height=16, width=16
x = torch.ones(4, 8, 16, 16)
output = dropout2d(x)
# Anzahl der verworfenen Kanäle zählen
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print("Anteil der Kanäle ungleich null:", non_zero_channels.mean().item())
print("Erwartet, dass etwa 0.5 der Kanäle beibehalten werden")
import torch.nn as nn
dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()
# Eingabe: batch=4, channels=8, height=16, width=16
x = torch.ones(4, 8, 16, 16)
output = dropout2d(x)
# Anzahl der verworfenen Kanäle zählen
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print("Anteil der Kanäle ungleich null:", non_zero_channels.mean().item())
print("Erwartet, dass etwa 0.5 der Kanäle beibehalten werden")
Beispiel 2: Dropout vergleichen
Beispiel
import torch
import torch.nn as nn
dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)
# Eingabe
x = torch.randn(2, 4, 8, 8)
# Dropout: setzt zufällig einzelne Elemente auf null
out1 = dropout1d(x)
# Dropout2d: setzt Werte kanalweise auf null
out2 = dropout2d(x)
print("Dropout-Form:", out1.shape)
print("Dropout2d-Form:", out2.shape)
import torch.nn as nn
dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)
# Eingabe
x = torch.randn(2, 4, 8, 8)
# Dropout: setzt zufällig einzelne Elemente auf null
out1 = dropout1d(x)
# Dropout2d: setzt Werte kanalweise auf null
out2 = dropout2d(x)
print("Dropout-Form:", out1.shape)
print("Dropout2d-Form:", out2.shape)
Beispiel 3: Verwendung in CNN
Beispiel
import torch
import torch.nn as nn
# CNN mit Dropout2d
model = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Dropout2d(0.3), # Dropout auf Feature-Map-Ebene
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("Eingabe:", x.shape, "-> Ausgabe:", output.shape)
import torch.nn as nn
# CNN mit Dropout2d
model = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Dropout2d(0.3), # Dropout auf Feature-Map-Ebene
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("Eingabe:", x.shape, "-> Ausgabe:", output.shape)
Anwendungsfälle
- Faltungsnetzwerke: Regularisierung auf Feature-Map-Ebene
- Kanalabhängigkeit reduzieren
Hinweis: Dropout2d verwirft während des Trainings Kanäle und hat während der Evaluierung keine Wirkung.
Andere Erweiterungen