Функция hardsigmoid
Функция hardsigmoid из модуля torch.nn.functional применяет жесткую сигмоидальную активацию к каждому элементу входного тензора. Жесткий сигмоид является кусочно-линейной аппроксимацией стандартной сигмоидальной функции, что делает его более вычислительно эффективным. Первым параметром функция принимает входной тензор, вторым параметром можно передать значение inplace для выполнения операции на месте.
Функция вычисляется по формуле: если x > 3, то выход равен 1; если x < -3, то выход равен 0; в противном случае выход равен (x + 3) / 6. Это делает функцию быстрой и подходящей для использования в глубоких нейронных сетях, особенно на мобильных устройствах.
Синтаксис
torch.nn.functional.hardsigmoid(input, inplace=False)
Пример
Давайте применим жесткий сигмоид к тензору с различными значениями:
import torch
import torch.nn.functional as F
t = torch.tensor([-5.0, -2.0, 0.0, 2.0, 5.0])
res = F.hardsigmoid(t)
print(res)
Результат выполнения кода:
tensor([0.0000, 0.1667, 0.5000, 0.8333, 1.0000])
Пример
Применим функцию к двумерному тензору для наглядного сравнения элементов:
import torch
import torch.nn.functional as F
t = torch.tensor([
[-4.0, -1.0, 2.0],
[1.0, 4.0, -3.0]
])
res = F.hardsigmoid(t)
print(res)
Результат выполнения кода:
tensor([
[0.0000, 0.3333, 0.8333],
[0.6667, 1.0000, 0.0000]
])
Пример
Использование жесткого сигмоида в нейронной сети в качестве функции активации:
import torch
import torch.nn as nn
import torch.nn.functional as F
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(10, 5)
def forward(self, x):
x = self.fc(x)
return F.hardsigmoid(x)
model = MyModel()
t = torch.randn(3, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([3, 5])