Fonction torch.nn.LeakyReLU de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.LeakyReLUIl s'agit de la fonction d'activation Leaky ReLU dans PyTorch.
Elle permet aux valeurs négatives d'avoir un petit gradient positif, évitant le problème du « neurone mort ».
Définition de fonction
torch.nn.LeakyReLU(negative_slope=0.01, inplace=False)
Parameters
negative_slope: pente pour les valeurs négatives, valeur par défaut 0.01
Formule
f(x) = x, x > 0 f(x) = negative_slope * x, x <= 0
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
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])
sortie = lrelu(x)
print("Input:", x.tolist())
print("Sortie :", output.tolist())
print("Les valeurs négatives ont un petit gradient positif")
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])
sortie = lrelu(x)
print("Input:", x.tolist())
print("Sortie :", output.tolist())
print("Les valeurs négatives ont un petit gradient positif")
Exemple 2 : Utilisation dans un GAN
Exemple
import torch
import torch.nn as nn
# Les générateurs GAN utilisent couramment 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("Entrée :", z.shape, "-> Sortie :", output.shape)
import torch.nn as nn
# Les générateurs GAN utilisent couramment 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("Entrée :", z.shape, "-> Sortie :", output.shape)
Exemple 3 : Éviter les neurones morts
Exemple
import torch
import torch.nn as nn
# Comparer ReLU et LeakyReLU
relu = nn.ReLU()
lrelu = nn.LeakyReLU()
# entrée avec valeur négative
x = torch.randn(10, 100) - 5
# ReLU renvoie uniquement des 0
print("Ratio non nul après ReLU :", (relu(x) != 0).float().mean().item())
# LeakyReLU a un gradient
print("Ratio non nul après LeakyReLU :", (lrelu(x) != 0).float().mean().item())
import torch.nn as nn
# Comparer ReLU et LeakyReLU
relu = nn.ReLU()
lrelu = nn.LeakyReLU()
# entrée avec valeur négative
x = torch.randn(10, 100) - 5
# ReLU renvoie uniquement des 0
print("Ratio non nul après ReLU :", (relu(x) != 0).float().mean().item())
# LeakyReLU a un gradient
print("Ratio non nul après LeakyReLU :", (lrelu(x) != 0).float().mean().item())
Cas d'utilisation
- GAN: générateur, discriminateur
- Prévention des neurones morts
- Réseaux clairsemés
Autres extensions