Функция celu
Функция celu применяет активацию CELU (Continuously Differentiable Exponential Linear Unit) к каждому элементу входного тензора. Эта функция является гладкой аппроксимацией ReLU и определяется как CELU(x) = max(0, x) + min(0, alpha * (exp(x / alpha) - 1)). В отличие от стандартной функции ELU, CELU имеет непрерывную производную во всех точках, что делает её предпочтительной в некоторых задачах, требующих гладкости градиентов. Первым параметром функция принимает входной тензор, вторым параметром можно задать коэффициент alpha (по умолчанию 1.0), который контролирует насыщение для отрицательных значений. Третьим параметром передаётся флаг inplace, позволяющий выполнить операцию непосредственно на входном тензоре, изменяя его. Функция возвращает тензор с применённой активацией.
Синтаксис
torch.celu(input, alpha=1.0, inplace=False)
Пример с активацией для положительных и отрицательных чисел
Применим функцию celu к тензору, содержащему как положительные, так и отрицательные значения:
import torch
t = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
res = torch.celu(t)
print(res)
Результат выполнения кода:
tensor([-0.9502, -0.6321, 0.0000, 1.0000, 3.0000])
Пример с изменением параметра alpha
Изменим параметр alpha на 0.5, чтобы изменить крутизну насыщения для отрицательных значений:
import torch
t = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
res = torch.celu(t, alpha=0.5)
print(res)
Результат выполнения кода:
tensor([-0.4751, -0.3161, 0.0000, 1.0000, 3.0000])
Пример с использованием inplace
Применим функцию celu с параметром inplace=True, чтобы изменить исходный тензор без создания нового:
import torch
t = torch.tensor([-2.0, 0.0, 2.0])
torch.celu(t, inplace=True)
print(t)
Результат выполнения кода:
tensor([-0.8647, 0.0000, 2.0000])
Пример использования в нейронной сети
Функция celu часто используется как слой активации внутри моделей. Рассмотрим простой пример с линейным слоем и активацией:
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(10, 5),
nn.CELU(alpha=1.0)
)
x = torch.randn(3, 10)
out = model(x)
print(out.shape)
Результат выполнения кода:
torch.Size([3, 5])
Смотрите также
-
функцию
elu,
которая реализует экспоненциальную линейную активацию -
функцию
selu,
которая является масштабированной версией ELU -
функцию
relu,
которая является стандартной активацией Rectified Linear Unit -
функцию
leaky_relu,
которая позволяет небольшой положительный градиент для отрицательных значений