Функция PyTorch torch.nn.SiLU

PyTorch torch.nn 参考手册Справочное руководство PyTorch torch.nn


torch.nn.SiLUЭто функция активации Sigmoid Linear Unit в PyTorch, также известная как Swish.

Она обладает свойствами самогейтинга, более гладкая, чем ReLU, и показывает лучшие результаты в некоторых задачах.

Определение функции

torch.nn.SiLU(inplace=False)

Математический принцип

SiLU(x) = x * sigmoid(x)

Примеры использования

Пример 1: Базовое использование

Пример

import torch
import torch.nn as nn

silu = nn.SiLU()

x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
output = silu(x)

print("Input:", x.tolist())
print("Вывод:", output.tolist())

Пример 2: Сравнение с ReLU

Пример

import torch
import torch.nn as nn
import numpy as np

x = np.linspace(-3, 3, 7)
x_tensor = torch.tensor(x)

print("x SiLU ReLU")
print("-" * 30)
for xi in x_tensor:
    print(f"{xi.item():5.1f} {nn.SiLU()(xi.unsqueeze(0)).item():9.4f} {nn.ReLU()(xi.unsqueeze(0)).item():9.4f}")

Пример 3: Использование в MobileNet

Пример

import torch
import torch.nn as nn

# MobileNetV3 использует SiLU
model = nn.Sequential(
    nn.Conv2d(3, 32, 3, stride=2, padding=1),
    nn.BatchNorm2d(32),
    nn.SiLU(),
    nn.Conv2d(32, 64, 3, padding=1),
    nn.BatchNorm2d(64),
    nn.SiLU()
)

x = torch.randn(1, 3, 224, 224)
output = model(x)

print("Вход:", x.shape, "-> Выход:", output.shape)

Сценарии использования

  • MobileNet: MobileNetV3
  • EfficientNet
  • Гладкая активация: требует гейтинговых свойств

Примечание: SiLU вычислительно сложнее, чем ReLU, но её производительность обычно лучше.


PyTorch torch.nn 参考手册Справочное руководство PyTorch torch.nn

Другие расширения