Класс Softmin
Класс Softmin модуля torch.nn применяет функцию мягкого минимума к входному тензору вдоль указанной размерности. Эта функция является обобщением обычного минимума и преобразует входные значения в вероятности, которые обратно пропорциональны значениям входного тензора. Формула вычисления имеет вид: exp(-x_i) / sum(exp(-x_j)). Основным параметром конструктора является dim, который задает размерность, вдоль которой будет применяться операция. Если размерность не указана, то вычисления будут производиться по последней оси входного тензора.
Синтаксис
torch.nn.Softmin(dim=None)
Параметры
Основные параметры класса:
-
dim(int, опционально) - размерность, вдоль которой будет вычисляться мягкий минимум. Если параметр не передан, вычисления проводятся по последней оси (размерности) тензора.
Пример
Создадим слой Softmin без указания размерности и применим его к одномерному тензору:
import torch
import torch.nn as nn
softmin = nn.Softmin()
t = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
res = softmin(t)
print(res)
Результат выполнения кода:
tensor([0.5123, 0.1884, 0.0693, 0.0255, 0.0094])
Как видно из результата, наибольшая вероятность присвоена наименьшему значению (1.0), а наименьшая - наибольшему (5.0), что соответствует логике работы мягкого минимума.
Пример
Рассмотрим применение Softmin к двумерному тензору вдоль разных размерностей. Сначала применим слой без указания dim, тогда вычисления будут по последней оси:
import torch
import torch.nn as nn
softmin = nn.Softmin()
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = softmin(t)
print(res)
Результат выполнения кода:
tensor([
[0.6652, 0.2447, 0.0900],
[0.6652, 0.2447, 0.0900],
])
Теперь укажем размерность dim=0, чтобы вычисления производились по строкам (первой оси):
import torch
import torch.nn as nn
softmin = nn.Softmin(dim=0)
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = softmin(t)
print(res)
Результат выполнения кода:
tensor([
[0.9526, 0.9526, 0.9526],
[0.0474, 0.0474, 0.0474],
])
В этом случае вероятности вычисляются для каждой колонки по отдельности, и для каждого столбца сумма вероятностей равна 1.
Пример
Применим Softmin с отрицательными значениями. Функция работает корректно с любыми числами, так как использует экспоненту:
import torch
import torch.nn as nn
softmin = nn.Softmin(dim=0)
t = torch.tensor([-1.0, -2.0, -3.0])
res = softmin(t)
print(res)
Результат выполнения кода:
tensor([0.0900, 0.2447, 0.6652])
Здесь наименьшее значение (-3.0) получает наибольшую вероятность 0.6652, а наибольшее значение (-1.0) - наименьшую 0.0900.
Смотрите также
-
класс
Softmax,
который вычисляет мягкий максимум вдоль указанной размерности -
класс
LogSoftmax,
который применяет логарифм к результату Softmax -
класс
Softplus,
который является гладкой аппроксимацией функции ReLU -
класс
Sigmoid,
который применяет сигмоидную функцию активации к элементам тензора