Función PyTorch torch.nn.Dropout2d
Manual de referencia de PyTorch torch.nn
torch.nn.Dropout2dEs el módulo Dropout bidimensional en PyTorch.
Aleatoriamente pone a cero canales completos, adecuado para mapas de características de capas convolucionales.
Definición de la función
torch.nn.Dropout2d(p=0.5, inplace=False)
Características
- Pone a cero aleatoriamente según la dimensión del canal (channel)
- Todos los canales de cada muestra mantienen un patrón de descarte consistente
Ejemplo de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()
# Entrada: batch=4, canales=8, alto=16, ancho=16
x = torch.ones(4, 8, 16, 16)
output = dropout2d(x)
# Cuenta el número de canales descartados
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print(Proporción de canales no cero:, non_zero_channels.mean().item())
print(Se espera que aproximadamente 0.5 de los canales se conserve.)
import torch.nn as nn
dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()
# Entrada: batch=4, canales=8, alto=16, ancho=16
x = torch.ones(4, 8, 16, 16)
output = dropout2d(x)
# Cuenta el número de canales descartados
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print(Proporción de canales no cero:, non_zero_channels.mean().item())
print(Se espera que aproximadamente 0.5 de los canales se conserve.)
Ejemplo 2: Comparación con Dropout
Ejemplo
import torch
import torch.nn as nn
dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)
# Entrada
x = torch.randn(2, 4, 8, 8)
# Dropout: pone a cero elementos individuales aleatoriamente
out1 = dropout1d(x)
# Dropout2d: pone a cero por canal
out2 = dropout2d(x)
print(Forma de Dropout:, out1.shape)
print(Forma de Dropout2d:, out2.shape)
import torch.nn as nn
dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)
# Entrada
x = torch.randn(2, 4, 8, 8)
# Dropout: pone a cero elementos individuales aleatoriamente
out1 = dropout1d(x)
# Dropout2d: pone a cero por canal
out2 = dropout2d(x)
print(Forma de Dropout:, out1.shape)
print(Forma de Dropout2d:, out2.shape)
Ejemplo 3: Uso en CNN
Ejemplo
import torch
import torch.nn as nn
# CNN con Dropout2d
model = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Dropout2d(0.3), # Descarte a nivel de mapa de características
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(Entrada:, x.shape, -> Salida:, output.shape)
import torch.nn as nn
# CNN con Dropout2d
model = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Dropout2d(0.3), # Descarte a nivel de mapa de características
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(Entrada:, x.shape, -> Salida:, output.shape)
Casos de uso
- Redes convolucionales: Regularización a nivel de mapa de características
- Reducir la dependencia entre canales
Nota: Dropout2d descarta por canal durante el entrenamiento; no tiene efecto durante la evaluación.
Otras extensiones