Función PyTorch torch.nn.LeakyReLU
Manual de referencia de PyTorch torch.nn
torch.nn.LeakyReLUEs la función de activación ReLU con fuga en PyTorch.
Permite que los valores negativos tengan una pequeña pendiente positiva, evitando el problema de las "neuronas muertas".
Definición de la función
torch.nn.LeakyReLU(negative_slope=0.01, inplace=False)
Parámetros
negative_slopenegative_slope: la pendiente de los valores negativos, valor predeterminado 0.01
Fórmula
f(x) = x, x > 0 f(x) = negative_slope * x, x <= 0
Ejemplo de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
lrelu = nn.LeakyReLU(negative_slope=0.1)
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
output = lrelu(x)
print("Entrada:", x.tolist())
print("Salida:", output.tolist())
print("Los valores negativos tienen una pequeña pendiente positiva")
import torch.nn as nn
lrelu = nn.LeakyReLU(negative_slope=0.1)
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
output = lrelu(x)
print("Entrada:", x.tolist())
print("Salida:", output.tolist())
print("Los valores negativos tienen una pequeña pendiente positiva")
Ejemplo 2: Uso en GAN
Ejemplo
import torch
import torch.nn as nn
# El generador de GAN usa comúnmente LeakyReLU
generator = nn.Sequential(
nn.Linear(100, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 784),
nn.Tanh()
)
z = torch.randn(4, 100)
output = generator(z)
print("Entrada:", z.shape, "-> Salida:", output.shape)
import torch.nn as nn
# El generador de GAN usa comúnmente LeakyReLU
generator = nn.Sequential(
nn.Linear(100, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 784),
nn.Tanh()
)
z = torch.randn(4, 100)
output = generator(z)
print("Entrada:", z.shape, "-> Salida:", output.shape)
Ejemplo 3: Prevención de neuronas muertas
Ejemplo
import torch
import torch.nn as nn
# Comparar ReLU y LeakyReLU
relu = nn.ReLU()
lrelu = nn.LeakyReLU()
# Entrada de valores negativos
x = torch.randn(10, 100) - 5
# ReLU genera todo 0
print("Proporción de no ceros después de ReLU:", (relu(x) != 0).float().mean().item())
# LeakyReLU tiene pendiente
print("Proporción de no ceros después de LeakyReLU:", (lrelu(x) != 0).float().mean().item())
import torch.nn as nn
# Comparar ReLU y LeakyReLU
relu = nn.ReLU()
lrelu = nn.LeakyReLU()
# Entrada de valores negativos
x = torch.randn(10, 100) - 5
# ReLU genera todo 0
print("Proporción de no ceros después de ReLU:", (relu(x) != 0).float().mean().item())
# LeakyReLU tiene pendiente
print("Proporción de no ceros después de LeakyReLU:", (lrelu(x) != 0).float().mean().item())
Escenarios de uso
- GANGenerador, discriminador
- Prevención de neuronas muertas
- Redes dispersas
Otras extensiones