Класс Mish
Класс Mish реализует функцию активации mish,
которая определяется как x * tanh(softplus(x)).
Эта функция является гладкой, не монотонной и самовыравнивающейся.
В отличие от функции ReLU, Mish позволяет
небольшому количеству отрицательных значений проходить через сеть,
что может улучшить процесс обучения. Класс не принимает
никаких параметров и может быть использован в любом месте,
где требуется функция активации.
Синтаксис
torch.nn.Mish()
Пример
Давайте создадим функцию активации Mish и применим ее к тензору:
import torch
mish = torch.nn.Mish()
t = torch.tensor([-1.0, 0.0, 1.0, 2.0])
res = mish(t)
print(res)
Результат выполнения кода:
tensor([-0.3034, 0.0000, 0.8651, 1.9636])
Пример
Рассмотрим использование Mish внутри полносвязного слоя
в составе последовательной модели:
import torch
model = torch.nn.Sequential(
torch.nn.Linear(10, 20),
torch.nn.Mish(),
torch.nn.Linear(20, 1)
)
t = torch.randn(5, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([5, 1])
Пример
Покажем, как Mish обрабатывает отрицательные значения.
В отличие от ReLU, она не обнуляет их полностью,
а пропускает небольшие отрицательные числа:
import torch
mish = torch.nn.Mish()
t = torch.tensor([[-0.5, 0.5], [-0.1, 0.1]])
res = mish(t)
print(res)
Результат выполнения кода:
tensor([[-0.2053, 0.4753],
[-0.0476, 0.0979]])