Класс ELU
Класс ELU применяет экспоненциальную линейную функцию активации к каждому элементу входного тензора. Первым параметром конструктор принимает коэффициент alpha (по умолчанию 1.0), который определяет наклон для отрицательных значений. Вторым параметром можно указать inplace - выполнять ли операцию на месте (по умолчанию False).
Функция ELU вычисляется по формуле: если входное значение x > 0, то выход равен x, иначе выход равен alpha * (exp(x) - 1). Эта функция позволяет получать отрицательные выходы, что помогает нейронным сетям обучаться быстрее, так как среднее значение активаций стремится к нулю.
Синтаксис
torch.nn.ELU(alpha=1.0, inplace=False)
Пример
Давайте создадим слой ELU с коэффициентом по умолчанию и применим его к тензору:
import torch
import torch.nn as nn
elu = nn.ELU()
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
res = elu(t)
print(res)
Результат выполнения кода:
tensor([-0.8647, -0.6321, 0.0000, 1.0000, 2.0000])
Пример
Теперь создадим ELU с коэффициентом alpha равным 0.5 и применим к тому же тензору:
import torch
import torch.nn as nn
elu = nn.ELU(alpha=0.5)
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
res = elu(t)
print(res)
Результат выполнения кода:
tensor([-0.4323, -0.3161, 0.0000, 1.0000, 2.0000])
Пример
Давайте применим ELU к двумерному тензору, чтобы увидеть работу с многомерными данными:
import torch
import torch.nn as nn
elu = nn.ELU()
t = torch.tensor([
[-3.0, -2.0, -1.0],
[0.0, 1.0, 2.0],
[3.0, 4.0, 5.0],
])
res = elu(t)
print(res)
Результат выполнения кода:
tensor([
[-0.9502, -0.8647, -0.6321],
[ 0.0000, 1.0000, 2.0000],
[ 3.0000, 4.0000, 5.0000],
])
Пример
Используем ELU в составе последовательной модели нейронной сети:
import torch
import torch.nn as nn
torch.manual_seed(0)
model = nn.Sequential(
nn.Linear(10, 20),
nn.ELU(alpha=1.0),
nn.Linear(20, 5),
nn.ELU(alpha=1.0),
)
t = torch.randn(3, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([3, 5])
Смотрите также
-
класс
ReLU,
который реализует линейную функцию активации с отсечением отрицательных значений -
класс
LeakyReLU,
который позволяет задавать небольшой наклон для отрицательных значений -
класс
SELU,
который является масштабированной версией ELU -
класс
CELU,
который представляет собой непрерывную версию ELU