Fonction torch.nn.Dropout2d de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.Dropout2dest un module Dropout bidimensionnel dans PyTorch.
Il met aléatoirement à zéro des canaux entiers, adapté aux cartes de caractéristiques des couches convolutionnelles.
Définition de fonction
torch.nn.Dropout2d(p=0.5, inplace=False)
Fonctionnalités
- Mettre aléatoirement à zéro le long de la dimension des canaux
- Tous les canaux de chaque échantillon maintiennent un motif de dropout cohérent
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
import torch.nn as nn
dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()
# Entrée : batch=4, channels=8, height=16, width=16
x = torch.ones(4, 8, 16, 16)
output = dropout2d(x)
# Compter le nombre de canaux désactivés
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print("Ratio de canaux non nuls :", non_zero_channels.mean().item())
print("Environ 0.5 des canaux devraient être conservés")
import torch.nn as nn
dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()
# Entrée : batch=4, channels=8, height=16, width=16
x = torch.ones(4, 8, 16, 16)
output = dropout2d(x)
# Compter le nombre de canaux désactivés
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print("Ratio de canaux non nuls :", non_zero_channels.mean().item())
print("Environ 0.5 des canaux devraient être conservés")
Exemple 2 : Comparaison de Dropout
Exemple
import torch
import torch.nn as nn
dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)
# Entrée
x = torch.randn(2, 4, 8, 8)
# Dropout : met aléatoirement à zéro des éléments individuels
out1 = dropout1d(x)
# Dropout2d : met à zéro par canal
out2 = dropout2d(x)
print("Forme de Dropout :", out1.shape)
print("Forme de Dropout2d :", out2.shape)
import torch.nn as nn
dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)
# Entrée
x = torch.randn(2, 4, 8, 8)
# Dropout : met aléatoirement à zéro des éléments individuels
out1 = dropout1d(x)
# Dropout2d : met à zéro par canal
out2 = dropout2d(x)
print("Forme de Dropout :", out1.shape)
print("Forme de Dropout2d :", out2.shape)
Exemple 3 : Utilisation dans un CNN
Exemple
import torch
import torch.nn as nn
# CNN avec Dropout2d
model = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Dropout2d(0.3), # Dropout au niveau de la carte de caractéristiques
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("Entrée :", x.shape, "-> Sortie :", output.shape)
import torch.nn as nn
# CNN avec Dropout2d
model = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Dropout2d(0.3), # Dropout au niveau de la carte de caractéristiques
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("Entrée :", x.shape, "-> Sortie :", output.shape)
Cas d'utilisation
- Réseaux convolutionnels: Régularisation au niveau de la carte de caractéristiques
- Réduire la dépendance entre canaux
Remarque : Dropout2d désactive des canaux pendant l'entraînement et n'a aucun effet lors de l'évaluation.
Autres extensions