Función torch.nn.SiLU de PyTorch

PyTorch torch.nn 参考手册Manual de referencia de PyTorch torch.nn


torch.nn.SiLUEs una función de activación Sigmoid Linear Unit en PyTorch, también conocida como Swish.

Tiene características de autopuerta (self-gating), es más suave que ReLU y funciona mejor en ciertas tareas.

Definición de la función

torch.nn.SiLU(inplace=False)

Principio matemático

SiLU(x) = x * sigmoid(x)

Ejemplo de uso

Ejemplo 1: Uso básico

Ejemplo

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("Entrada:", x.tolist())
print("Salida:", output.tolist())

Ejemplo 2: Comparación con ReLU

Ejemplo

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}")

Ejemplo 3: Uso en MobileNet

Ejemplo

import torch
import torch.nn as nn

# MobileNetV3 usa 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("Entrada:", x.shape, "-> Salida:", output.shape)

Escenarios de uso

  • MobileNet: MobileNetV3
  • EfficientNet
  • Activación suave: se requieren características de autopuerta (self-gating)

Nota: el cálculo de SiLU es más complejo que el de ReLU, pero el rendimiento suele ser mejor.


PyTorch torch.nn 参考手册Manual de referencia de PyTorch torch.nn

Otras extensiones