Класс Softsign
Класс Softsign реализует функцию активации в
PyTorch. Данная функция вычисляется по формуле
x / (1 + |x|) и возвращает значения
в диапазоне от -1 до 1. В отличие от гиперболического
тангенса, Softsign имеет более плавный переход
и медленнее насыщается. Класс не принимает
никаких параметров при инициализации.
Синтаксис
torch.nn.Softsign()
Пример
Давайте создадим функцию активации и применим ее к тензору чисел:
import torch
activation = torch.nn.Softsign()
t = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
res = activation(t)
print(res)
Результат выполнения кода:
tensor([-0.7500, -0.5000, 0.0000, 0.5000, 0.7500])
Пример
Давайте применим Softsign к двумерному тензору:
import torch
activation = torch.nn.Softsign()
t = torch.tensor([
[-2.0, -0.5, 0.0],
[0.5, 2.0, 4.0],
])
res = activation(t)
print(res)
Результат выполнения кода:
tensor([
[-0.6667, -0.3333, 0.0000],
[0.3333, 0.6667, 0.8000],
])
Пример
Давайте используем Softsign в нейронной сети в качестве функции активации:
import torch
model = torch.nn.Sequential(
torch.nn.Linear(10, 20),
torch.nn.Softsign(),
torch.nn.Linear(20, 5),
torch.nn.Softsign(),
)
t = torch.randn(3, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([3, 5])
Все значения выходного тензора будут находиться в диапазоне от -1 до 1.
Пример
Давайте сравним Softsign с функцией Tanh на больших значениях:
import torch
softsign = torch.nn.Softsign()
tanh = torch.nn.Tanh()
t = torch.tensor([-10.0, -5.0, 0.0, 5.0, 10.0])
res_softsign = softsign(t)
res_tanh = tanh(t)
print("Softsign:", res_softsign)
print("Tanh: ", res_tanh)
Результат выполнения кода:
Softsign: tensor([-0.9091, -0.8333, 0.0000, 0.8333, 0.9091])
Tanh: tensor([-1.0000, -0.9999, 0.0000, 0.9999, 1.0000])
Видно, что Softsign насыщается медленнее, чем Tanh, что может быть полезно для предотвращения затухания градиентов.