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

Функция F.softplus

Функция F.softplus применяет к каждому элементу тензора преобразование, которое является гладкой аппроксимацией функции ReLU. Она вычисляется по формуле log(1 + exp(x)) и позволяет получать градиенты для отрицательных значений, что помогает избежать проблемы "мертвых" нейронов. Функция принимает на вход тензор произвольной формы и возвращает тензор той же формы с примененным преобразованием.

Синтаксис

torch.nn.functional.softplus(input, beta=1.0, threshold=20.0)

Параметр beta управляет крутизной функции: чем больше значение, тем быстрее она приближается к ReLU. Параметр threshold задает порог, выше которого функция переключается на линейное приближение для численной стабильности.

Пример

Давайте применим softplus к тензору с положительными и отрицательными числами:

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

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

tensor([0.1269, 0.3133, 0.6931, 1.3133, 2.1269])

Обратите внимание, что для отрицательных значений функция возвращает небольшие положительные числа, а для положительных - значения, близкие к исходным.

Пример

Давайте сравним softplus с ReLU на одном тензоре:

import torch import torch.nn.functional as F t = torch.tensor([-3.0, -1.5, 0.0, 1.5, 3.0]) softplus_res = F.softplus(t) relu_res = F.relu(t) print("Softplus:", softplus_res) print("ReLU: ", relu_res)

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

Softplus: tensor([0.0486, 0.2014, 0.6931, 1.7014, 3.0486]) ReLU: tensor([0.0000, 0.0000, 0.0000, 1.5000, 3.0000])

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

Пример

Давайте изменим параметр beta, чтобы сделать функцию более крутой:

import torch import torch.nn.functional as F t = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0]) res_default = F.softplus(t) res_beta2 = F.softplus(t, beta=2.0) print("beta=1.0:", res_default) print("beta=2.0:", res_beta2)

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

beta=1.0: tensor([0.1269, 0.3133, 0.6931, 1.3133, 2.1269]) beta=2.0: tensor([0.0181, 0.0676, 0.6931, 2.0676, 4.0181])

При увеличении beta функция быстрее приближается к ReLU, и значения для положительных чисел становятся ближе к исходным.

Пример

Давайте применим softplus к двумерному тензору:

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

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

tensor([ [0.3133, 0.6931, 1.3133], [2.1269, 0.1269, 3.0486] ])

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

  • функцию relu,
    которая реализует функцию выпрямления
  • функцию leaky_relu,
    которая позволяет небольшие градиенты для отрицательных значений
  • функцию sigmoid,
    которая преобразует значения в диапазон от 0 до 1
  • функцию tanh,
    которая преобразует значения в диапазон от -1 до 1
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить