Функция PyTorch torch.nn.LeakyReLU
Справочное руководство PyTorch torch.nn
torch.nn.LeakyReLUЭто функция активации Leaky ReLU в PyTorch.
Она позволяет отрицательным значениям иметь небольшой положительный градиент, избегая проблемы «мёртвого нейрона».
Определение функции
torch.nn.LeakyReLU(negative_slope=0.01, inplace=False)
Parameters
negative_slope: наклон для отрицательных значений, по умолчанию 0.01
Формула
f(x) = x, x > 0 f(x) = negative_slope * x, x <= 0
Примеры использования
Пример 1: Базовое использование
Пример
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("Input:", x.tolist())
print("Вывод:", output.tolist())
print("Отрицательные значения имеют небольшой положительный градиент")
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("Input:", x.tolist())
print("Вывод:", output.tolist())
print("Отрицательные значения имеют небольшой положительный градиент")
Пример 2: Использование в GAN
Пример
import torch
import torch.nn as nn
# Генераторы GAN обычно используют 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("Вход:", z.shape, "-> Выход:", output.shape)
import torch.nn as nn
# Генераторы GAN обычно используют 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("Вход:", z.shape, "-> Выход:", output.shape)
Пример 3: Предотвращение мёртвых нейронов
Пример
import torch
import torch.nn as nn
# Сравнение ReLU и LeakyReLU
relu = nn.ReLU()
lrelu = nn.LeakyReLU()
# ввод отрицательного значения
x = torch.randn(10, 100) - 5
# ReLU выводит все 0
print("Доля ненулевых значений после ReLU:", (relu(x) != 0).float().mean().item())
# LeakyReLU имеет градиент
print("Доля ненулевых значений после LeakyReLU:", (lrelu(x) != 0).float().mean().item())
import torch.nn as nn
# Сравнение ReLU и LeakyReLU
relu = nn.ReLU()
lrelu = nn.LeakyReLU()
# ввод отрицательного значения
x = torch.randn(10, 100) - 5
# ReLU выводит все 0
print("Доля ненулевых значений после ReLU:", (relu(x) != 0).float().mean().item())
# LeakyReLU имеет градиент
print("Доля ненулевых значений после LeakyReLU:", (lrelu(x) != 0).float().mean().item())
Сценарии использования
- GAN: генератор, дискриминатор
- Предотвращение мёртвых нейронов
- Разреженные сети
Другие расширения