Функция silu
Функция silu применяется поэлементно к тензору.
Она возвращает новый тензор, где каждый элемент вычисляется
по формуле: x * sigmoid(x).
Функция является гладкой и не имеет изломов, как ReLU,
что может улучшить обучение глубоких сетей.
Синтаксис
torch.silu(x, inplace=False)
Параметры функции:
-
x(тензор) - входной тензор любой формы. -
inplace(bool) - еслиTrue, производится замена значений на месте. По умолчаниюFalse.
Пример
Базовое применение функции silu к одномерному тензору:
import torch
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
res = torch.silu(t)
print(res)
Результат выполнения кода:
tensor([-0.2384, -0.2689, 0.0000, 0.7311, 1.7616])
Пример
Применение silu к двумерному тензору:
import torch
t = torch.tensor([
[-0.5, 0.0, 0.5],
[1.0, -1.0, 2.0]
])
res = torch.silu(t)
print(res)
Результат выполнения кода:
tensor([
[-0.1753, 0.0000, 0.2753],
[0.7311, -0.2689, 1.7616]
])
Пример
Использование функции в нейронной сети вместе со слоем
Linear. Зафиксируем зерно для воспроизводимости:
import torch
torch.manual_seed(0)
layer = torch.nn.Linear(2, 3)
t = torch.tensor([[0.1, -0.2]])
x = layer(t)
res = torch.silu(x)
print(res)
Результат выполнения кода:
tensor([[0.3236, 0.5418, 0.4756]], grad_fn=<SiluBackward0>)
Пример
Использование режима inplace=True для экономии памяти.
Исходный тензор будет изменён:
import torch
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
torch.silu(t, inplace=True)
print(t)
Результат выполнения кода:
tensor([-0.2384, -0.2689, 0.0000, 0.7311, 1.7616])