Класс CELU
Класс CELU реализует функцию активации Continuously Differentiable Exponential Linear Unit. В отличие от ELU, эта функция является непрерывно дифференцируемой во всех точках, что улучшает стабильность градиентов во время обучения. Первым параметром конструктор принимает параметр alpha, который контролирует насыщение для отрицательных значений. Вторым параметром можно указать inplace, позволяющий выполнять операцию на месте для экономии памяти.
Синтаксис
torch.nn.CELU(alpha=1.0, inplace=False)
Пример
Создадим слой активации и применим его к тензору:
import torch
import torch.nn as nn
celu = nn.CELU(alpha=1.0)
t = torch.tensor([-2.0, -0.5, 0.0, 0.5, 2.0])
res = celu(t)
print(res)
Результат выполнения кода:
tensor([-0.8647, -0.3935, 0.0000, 0.5000, 2.0000])
Пример
Применим активацию к двухмерному тензору с параметром alpha=0.5:
import torch
import torch.nn as nn
celu = nn.CELU(alpha=0.5)
t = torch.tensor([
[-1.0, 2.0],
[-3.0, 4.0],
])
res = celu(t)
print(res)
Результат выполнения кода:
tensor([
[-0.3161, 2.0000],
[-0.4751, 4.0000],
])
Пример
Используем режим inplace для модификации тензора на месте:
import torch
import torch.nn as nn
celu = nn.CELU(alpha=1.0, inplace=True)
t = torch.tensor([-1.0, 0.5, 2.0])
celu(t)
print(t)
Результат выполнения кода:
tensor([-0.6321, 0.5000, 2.0000])
Пример
Применим слой к тензору с градиентами, используя зафиксированное зерно:
import torch
import torch.nn as nn
torch.manual_seed(0)
celu = nn.CELU(alpha=1.5)
t = torch.randn(4, requires_grad=True)
res = celu(t)
res.mean().backward()
print(res)
print(t.grad)
Результат выполнения кода:
tensor([ 0.0000, -1.5939, 0.8820, 1.4890], grad_fn=<CeluBackward0>)
tensor([0.0000, 0.3390, 0.2500, 0.2500])
Пример
Используем слой внутри последовательной модели:
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(10, 20),
nn.CELU(alpha=0.8),
nn.Linear(20, 5),
)
t = torch.randn(3, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([3, 5])