Класс ReLU6
Класс ReLU6 из модуля torch.nn представляет собой функцию активации,
которая применяется к каждому элементу входного тензора.
Она работает по принципу стандартной функции ReLU, но с дополнительным ограничением
сверху: все значения, превышающие 6, обрезаются до 6.
Это делает функцию более устойчивой к большим входным значениям
и часто используется в мобильных нейросетях, например, в архитектуре MobileNet.
Синтаксис
torch.nn.ReLU6(inplace=False)
Параметр inplace управляет тем, будет ли операция выполняться
с изменением исходного тензора или с созданием нового.
По умолчанию стоит False.
Пример
Давайте создадим слой ReLU6 и применим его к тензору чисел:
import torch
import torch.nn as nn
relu6 = nn.ReLU6()
t = torch.tensor([-5.0, -1.0, 0.0, 3.0, 5.0, 8.0, 12.0])
res = relu6(t)
print(res)
Результат выполнения кода:
tensor([0., 0., 0., 3., 5., 6., 6.])
Как видно из примера, отрицательные значения превращаются в 0, значения от 0 до 6 остаются без изменений, а значения больше 6 обрезаются до 6.
Пример
Рассмотрим использование ReLU6 в составе последовательной модели:
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(10, 5),
nn.ReLU6(),
nn.Linear(5, 1)
)
t = torch.randn(3, 10)
res = model(t)
print(res)
Результат выполнения кода:
tensor([[-1.6424],
[ 1.0486],
[-1.4927]], grad_fn=<AddmmBackward0>)
В этом примере слой ReLU6 применяется после первого линейного слоя,
ограничивая его выходные значения диапазоном от 0 до 6 перед передачей
во второй линейный слой.
Пример
Параметр inplace позволяет изменить исходный тензор напрямую,
что экономит память:
import torch
import torch.nn as nn
relu6_inplace = nn.ReLU6(inplace=True)
t = torch.tensor([-2.0, 1.0, 4.0, 9.0])
print("До применения:", t)
res = relu6_inplace(t)
print("После применения:", t)
print("Возвращенный тензор:", res)
Результат выполнения кода:
До применения: tensor([-2., 1., 4., 9.])
После применения: tensor([0., 1., 4., 6.])
Возвращенный тензор: tensor([0., 1., 4., 6.])
При использовании inplace=True исходный тензор изменяется,
а возвращаемый тензор является ссылкой на него же.
Смотрите также
-
класс
ReLU,
который реализует стандартную функцию активации без верхнего ограничения -
класс
Hardtanh,
который ограничивает значения в произвольном диапазоне -
класс
LeakyReLU,
который позволяет небольшой градиент для отрицательных значений -
класс
ELU,
который использует экспоненциальную функцию для отрицательных значений