РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
338 of 769 menu

Класс SiLU

Класс SiLU (Sigmoid Linear Unit) реализует активационную функцию, которая вычисляется по формуле x * sigmoid(x). Эта функция является гладкой, нелинейной и не имеет проблемы "умирающих" нейронов, что делает её популярной в современных архитектурах глубоких нейронных сетей. В некоторых источниках она также известна как Swish.

Класс наследуется от torch.nn.Module и не имеет обучаемых параметров. Он применяется поэлементно к входному тензору и возвращает тензор той же формы.

Синтаксис

torch.nn.SiLU(inplace=False)

Параметры

Класс принимает один необязательный параметр:

  • inplace (bool, по умолчанию False) - если установить в True, операция будет выполнена непосредственно на входном тензоре, изменяя его. Использование этого параметра может сэкономить память, но следует быть осторожным, чтобы не потерять исходные данные.

Пример

Создадим экземпляр класса SiLU и применим его к тензору:

import torch # Создаем экземпляр SiLU activation = torch.nn.SiLU() # Входной тензор t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0]) # Применяем активацию res = activation(t) print(res)

Результат выполнения кода:

tensor([-0.2384, -0.2689, 0.0000, 0.7311, 1.7616])

Пример

Применим SiLU к двумерному тензору. Обратите внимание, что форма тензора сохраняется:

import torch activation = torch.nn.SiLU() # Двумерный тензор t = torch.tensor([ [-3.0, -2.0, -1.0], [0.0, 1.0, 2.0], [3.0, 4.0, 5.0] ]) res = activation(t) print(res)

Результат выполнения кода:

tensor([ [-0.1425, -0.2384, -0.2689], [0.0000, 0.7311, 1.7616], [2.8575, 3.9281, 4.9872] ])

Пример

Используем параметр inplace=True. В этом случае входной тензор будет изменён непосредственно:

import torch activation = torch.nn.SiLU(inplace=True) t = torch.tensor([-1.5, 0.0, 1.5]) print("Before:", t) # Применяем активацию in-place res = activation(t) print("After:", t) print("Returned:", res)

Результат выполнения кода:

Before: tensor([-1.5000, 0.0000, 1.5000]) After: tensor([-0.2689, 0.0000, 1.2840]) Returned: tensor([-0.2689, 0.0000, 1.2840])

Как видно, исходный тензор t был изменён, а возвращаемый тензор res указывает на те же данные.

Пример

Использование SiLU в составе последовательной модели torch.nn.Sequential:

import torch # Создаем модель с линейным слоем и SiLU model = torch.nn.Sequential( torch.nn.Linear(5, 10), torch.nn.SiLU(), torch.nn.Linear(10, 1) ) # Создаем случайный входной вектор torch.manual_seed(0) x = torch.randn(3, 5) # Прямой проход output = model(x) print(output.shape) print(output)

Результат выполнения кода:

torch.Size([3, 1]) tensor([[0.1702], [0.1488], [0.0123]])

Смотрите также

  • класс ReLU,
    который реализует выпрямленную линейную активацию
  • класс ELU,
    который реализует экспоненциальную линейную активацию
  • класс GELU,
    который реализует гауссову линейную активацию
  • класс Mish,
    который реализует активацию Mish (x * tanh(softplus(x)))
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить