Функция hardswish
Функция hardswish из модуля torch.nn.functional применяет
функцию активации HardSwish к каждому элементу входного тензора.
Эта функция является аппроксимацией функции Swish, но с более простыми
вычислениями. HardSwish определяется как:
x * min(max(x + 3, 0), 6) / 6.
Функция принимает на вход тензор и возвращает тензор той же формы.
Дополнительных параметров у функции нет.
Синтаксис
torch.nn.functional.hardswish(input)
Пример
Применим функцию HardSwish к одномерному тензору:
import torch
import torch.nn.functional as F
t = torch.tensor([-5.0, -3.0, 0.0, 3.0, 5.0])
res = F.hardswish(t)
print(res)
Результат выполнения кода:
tensor([-0.0000, -0.0000, 0.0000, 2.5000, 5.0000])
Пример
Применим функцию HardSwish к двумерному тензору:
import torch
import torch.nn.functional as F
t = torch.tensor([
[-4.0, -2.0, 0.0],
[2.0, 4.0, 6.0],
])
res = F.hardswish(t)
print(res)
Результат выполнения кода:
tensor([
[-0.0000, -0.0000, 0.0000],
[1.6667, 3.8333, 6.0000],
])
Пример
Используем HardSwish в качестве функции активации внутри последовательной модели. Зафиксируем случайное зерно для воспроизводимости:
import torch
import torch.nn as nn
import torch.nn.functional as F
torch.manual_seed(0)
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(5, 3)
def forward(self, x):
x = self.fc(x)
x = F.hardswish(x)
return x
model = MyModel()
t = torch.randn(2, 5)
res = model(t)
print(res)
Результат выполнения кода:
tensor([
[-1.2062, 0.0000, 0.0000],
[-1.1625, 0.0000, 0.0000],
], grad_fn=<HardswishBackward0>)
Смотрите также
-
функцию
swish,
которая является более гладкой версией HardSwish -
функцию
hardsigmoid,
которая используется в формуле HardSwish -
функцию
relu6,
которая ограничивает значения сверху числом 6 -
функцию
elu,
которая является экспоненциальной линейной функцией активации