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

Функция silu

Функция F.silu применяет функцию активации SiLU (Sigmoid Linear Unit), также известную как Swish, к каждому элементу входного тензора. Функция вычисляется как x * sigmoid(x), что создаёт гладкую, непрерывную и неограниченную сверху функцию активации. Параметром функция принимает входной тензор произвольной формы.

Синтаксис

torch.nn.functional.silu(input)

Функция может быть вызвана как непосредственно из модуля F, так и как метод тензора через silu.

Пример

Базовое применение функции SiLU к одномерному тензору:

import torch import torch.nn.functional as F t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0]) res = F.silu(t) print(res)

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

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

Пример

Применение SiLU к двумерному тензору:

import torch import torch.nn.functional as F t = torch.tensor([ [-3.0, -2.0, -1.0], [0.0, 1.0, 2.0], [3.0, 4.0, 5.0] ]) res = F.silu(t) print(res)

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

tensor([ [-0.1426, -0.2384, -0.2689], [0.0000, 0.7311, 1.7616], [2.8574, 3.9281, 4.9669] ])

Пример

Использование SiLU в качестве слоя в нейронной сети. Функция активации применяется после линейного слоя:

import torch import torch.nn as nn import torch.nn.functional as F class SimpleNet(nn.Module): def __init__(self): super().__init__() self.linear = nn.Linear(5, 3) def forward(self, x): x = self.linear(x) x = F.silu(x) return x model = SimpleNet() t = torch.randn(2, 5) res = model(t) print(res.shape) print(res)

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

torch.Size([2, 3]) tensor([ [0.0000, 0.0000, 0.0000], [0.0000, 0.0000, 0.0000] ], grad_fn=<SiluBackward0>)

Пример

Сравнение SiLU с сигмоидой для наглядности. Видно, что SiLU наследует свойства сигмоиды, но не насыщается для больших положительных значений:

import torch import torch.nn.functional as F t = torch.linspace(-10, 10, 5) silu_res = F.silu(t) sigmoid_res = torch.sigmoid(t) print("Input: ", t) print("SiLU: ", silu_res) print("Sigmoid: ", sigmoid_res)

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

"Input: tensor([-10.0000, -5.0000, 0.0000, 5.0000, 10.0000])" "SiLU: tensor([-0.0005, -0.0337, 0.0000, 4.9669, 9.9995])" "Sigmoid: tensor([0.0000, 0.0067, 0.5000, 0.9933, 1.0000])"

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

  • функцию relu,
    которая реализует простую и широко используемую функцию активации ReLU
  • функцию elu,
    которая является экспоненциальной версией ReLU с гладким переходом
  • функцию gelu,
    которая является гладкой аппроксимацией ReLU, основанной на гауссовском распределении
  • функцию softplus,
    которая является гладкой аппроксимацией ReLU с мягким насыщением
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить