Класс Softplus
Класс Softplus представляет собой функцию активации,
которая является гладкой аппроксимацией функции ReLU.
Она вычисляется по формуле: f(x) = 1 / β * ln(1 + exp(β * x)),
где β - параметр, управляющий крутизной функции.
По умолчанию β = 1. Класс наследуется от nn.Module
и может быть использован как слой в нейронной сети.
В отличие от ReLU, Softplus имеет ненулевую
производную для всех значений, что позволяет избежать
проблемы "мертвых нейронов".
Синтаксис
torch.nn.Softplus(beta=1, threshold=20)
Параметры:
beta- положительное значение, контролирующее крутизну функции. По умолчанию равно1.threshold- пороговое значение, выше которого функция переключается на линейный режим для повышения численной стабильности. По умолчанию равно20.
Пример
Создадим слой Softplus и применим его к тензору:
import torch
softplus = torch.nn.Softplus()
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
res = softplus(t)
print(res)
Результат выполнения кода:
tensor([0.1269, 0.3133, 0.6931, 1.3133, 2.1269])
Пример
Изменим параметр beta для изменения крутизны функции:
import torch
softplus = torch.nn.Softplus(beta=2.0)
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
res = softplus(t)
print(res)
Результат выполнения кода:
tensor([0.0181, 0.0789, 0.3466, 0.8466, 1.8466])
Пример
Используем Softplus в составе последовательной модели:
import torch
model = torch.nn.Sequential(
torch.nn.Linear(4, 8),
torch.nn.Softplus(),
torch.nn.Linear(8, 2)
)
t = torch.randn(3, 4)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([3, 2])