Функция F.prelu
Функция F.prelu применяет параметрическую функцию активации выпрямленного линейного элемента (Parametric ReLU). В отличие от обычного ReLU, который обнуляет отрицательные значения, PReLU умножает их на обучаемый коэффициент alpha, что позволяет модели адаптировать наклон для отрицательной области. Это помогает избежать проблемы "умирающих" нейронов и улучшает обучение глубоких сетей.
Первый параметр функции - входной тензор input. Второй параметр - весовой коэффициент weight, который является обучаемым параметром и должен иметь ту же размерность, что и количество каналов входного тензора (или может быть скаляром). По умолчанию коэффициент инициализируется значением 0.25.
Синтаксис
torch.nn.functional.prelu(input, weight)
Параметры
Функция принимает два обязательных аргумента:
-
input- входной тензор произвольной формы. -
weight- обучаемый тензор (коэффициент), который определяет наклон для отрицательных значений. Если входной тензор имеет форму (N, C, *), тоweightдолжен иметь размер (C) или (1). Если входной тензор одномерный,weightможет быть скаляром.
Пример
Базовое применение PReLU с коэффициентом по умолчанию:
import torch
import torch.nn.functional as F
t = torch.tensor([-1.0, 0.0, 1.0, 2.0])
weight = torch.tensor(0.25)
res = F.prelu(t, weight)
print(res)
Результат выполнения кода:
tensor([-0.2500, 0.0000, 1.0000, 2.0000])
Пример
Применение PReLU к двумерному тензору с весами для каждого канала:
import torch
import torch.nn.functional as F
t = torch.tensor([
[-1.0, -2.0, 3.0],
[4.0, -5.0, 6.0]
])
# weight для каждого из 3 каналов
weight = torch.tensor([0.1, 0.2, 0.3])
res = F.prelu(t, weight)
print(res)
Результат выполнения кода:
tensor([
[-0.1000, -0.4000, 0.9000],
[ 0.4000, -1.0000, 1.8000]
])
Пример
Использование PReLU в нейронной сети с обучаемым параметром:
import torch
import torch.nn as nn
import torch.nn.functional as F
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.prelu_weight = nn.Parameter(torch.tensor(0.1))
def forward(self, x):
return F.prelu(x, self.prelu_weight)
model = MyModel()
t = torch.tensor([-0.5, 0.5, -1.0, 2.0])
res = model(t)
print(res)
Результат выполнения кода:
tensor([-0.0500, 0.5000, -0.1000, 2.0000], grad_fn=<PreluBackward>)
Смотрите также
-
функцию
relu,
которая применяет стандартную функцию выпрямления с нулевым порогом -
функцию
leaky_relu,
которая применяет функцию с фиксированным коэффициентом наклона для отрицательных значений -
функцию
elu,
которая применяет экспоненциальную функцию активации -
функцию
gelu,
которая применяет гауссову функцию ошибок для активации