Функция F.selu
Функция F.selu применяет масштабированную экспоненциальную линейную единицу (Scaled Exponential Linear Unit) к каждому элементу входного тензора. Эта функция активации является самомасштабирующейся и помогает сохранять среднее значение и дисперсию активаций в глубоких сетях, что способствует более стабильному обучению. Функция определяется следующим образом: для положительных значений она возвращает x * scale, а для отрицательных - scale * alpha * (exp(x) - 1), где alpha и scale - предопределённые константы.
В качестве первого параметра функция принимает тензор input, к элементам которого применяется активация. Необязательный параметр inplace позволяет выполнить операцию непосредственно в исходном тензоре, изменяя его. По умолчанию inplace равен False, то есть создаётся новый тензор.
Синтаксис
torch.nn.functional.selu(input, inplace=False)
Пример
Давайте применим функцию F.selu к простому тензору с положительными и отрицательными числами:
import torch
import torch.nn.functional as F
t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
res = F.selu(t)
print(res)
Результат выполнения кода:
tensor([-2.1118, -1.1274, 0.0000, 1.0507, 2.1014])
Пример
Если мы хотим изменить исходный тензор, мы можем использовать параметр inplace:
import torch
import torch.nn.functional as F
t = torch.tensor([-1.0, 0.0, 1.0])
F.selu(t, inplace=True)
print(t)
Результат выполнения кода:
tensor([-1.1274, 0.0000, 1.0507])
Пример
Функция F.selu часто используется в нейронных сетях в качестве функции активации для скрытых слоёв. Вот пример её использования в простой модели:
import torch
import torch.nn as nn
import torch.nn.functional as F
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(10, 20)
self.fc2 = nn.Linear(20, 5)
def forward(self, x):
x = F.selu(self.fc1(x))
x = self.fc2(x)
return x
model = MyModel()
t = torch.randn(3, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([3, 5])
Смотрите также
-
функцию
elu,
которая применяет экспоненциальную линейную активацию без масштабирования -
функцию
relu,
которая применяет простую линейную активацию с отсечением отрицательных значений -
функцию
leaky_relu,
которая позволяет небольшим отрицательным значениям проходить через активацию -
функцию
alpha_dropout,
которая является специализированным регуляризатором для сетей с активацией SELU