Класс Hardsigmoid
Класс Hardsigmoid применяет кусочно-линейную аппроксимацию сигмоиды
к каждому элементу тензора. Функция вычисляется по формуле:
max(0, min(1, (x + 3) / 6)). Этот класс не принимает параметров
при инициализации и используется как слой в нейронных сетях.
Синтаксис
torch.nn.Hardsigmoid()
Пример
Применим функцию активации к одномерному тензору:
import torch
m = torch.nn.Hardsigmoid()
t = torch.tensor([-5.0, -2.0, 0.0, 2.0, 5.0])
res = m(t)
print(res)
Результат выполнения кода:
tensor([0.0000, 0.1667, 0.5000, 0.8333, 1.0000])
Пример
Используем Hardsigmoid в составе последовательной модели для двумерного тензора:
import torch
model = torch.nn.Sequential(
torch.nn.Linear(5, 10),
torch.nn.Hardsigmoid()
)
t = torch.randn(3, 5)
res = model(t)
print(res.shape)
print(res)
Результат выполнения кода:
torch.Size([3, 10])
tensor([[0.4782, 0.6070, 0.8439, 0.7800, 0.5946, 0.4053, 0.6994, 0.5593, 0.5457, 0.4515],
[0.5658, 0.7234, 0.6963, 0.3852, 0.8214, 0.3779, 0.3509, 0.7738, 0.5667, 0.3897],
[0.3631, 0.4260, 0.3389, 0.4551, 0.7829, 0.5767, 0.6333, 0.6090, 0.5301, 0.7833]])
Пример
Сравним Hardsigmoid с обычной сигмоидой для наглядности:
import torch
torch.manual_seed(0)
t = torch.linspace(-5, 5, 11)
hard_sig = torch.nn.Hardsigmoid()
sig = torch.nn.Sigmoid()
res_hard = hard_sig(t)
res_sig = sig(t)
print("Hardsigmoid:", res_hard)
print("Sigmoid:", res_sig)
Результат выполнения кода:
Hardsigmoid: tensor([0.0000, 0.0000, 0.1667, 0.3333, 0.5000, 0.6667, 0.8333, 1.0000, 1.0000, 1.0000, 1.0000])
Sigmoid: tensor([0.0067, 0.0474, 0.2689, 0.7311, 0.9526, 0.9933, 0.9991, 0.9998, 1.0000, 1.0000, 1.0000])