Функция log_softmax
Функция F.log_softmax из модуля torch.nn.functional
применяет операцию логарифмического softmax к входному тензору.
Она вычисляет логарифм от softmax, что обеспечивает численную стабильность
и часто используется в сочетании с функцией потерь NLLLoss.
Первым параметром функция принимает тензор, вторым - измерение,
по которому вычисляется softmax. Также можно указать тип данных
через параметр dtype.
Синтаксис
torch.nn.functional.log_softmax(input, dim, dtype=None)
Пример
Давайте применим функцию к одномерному тензору:
import torch
import torch.nn.functional as F
t = torch.tensor([1.0, 2.0, 3.0])
res = F.log_softmax(t, dim=0)
print(res)
Результат выполнения кода:
tensor([-2.4076, -1.4076, -0.4076])
Пример
Теперь применим функцию к двумерному тензору по разным измерениям:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = F.log_softmax(t, dim=1)
print(res)
Результат выполнения кода:
tensor([
[-2.4076, -1.4076, -0.4076],
[-2.4076, -1.4076, -0.4076],
])
Пример
Проверим, что сумма экспонент от результата равна единице:
import torch
import torch.nn.functional as F
t = torch.tensor([1.0, 2.0, 3.0])
log_res = F.log_softmax(t, dim=0)
res = torch.exp(log_res)
print(res)
print(res.sum())
Результат выполнения кода:
tensor([0.0900, 0.2447, 0.6652])
tensor(1.0000)
Пример
Укажем тип данных для результата:
import torch
import torch.nn.functional as F
t = torch.tensor([1.0, 2.0, 3.0])
res = F.log_softmax(t, dim=0, dtype=torch.float64)
print(res.dtype)
Результат выполнения кода:
torch.float64
Смотрите также
-
функцию
softmax,
которая вычисляет обычный softmax -
функцию
softmin,
которая вычисляет softmin -
функцию
cross_entropy,
которая объединяет log_softmax и NLLLoss -
функцию
nll_loss,
которая вычисляет отрицательное логарифмическое правдоподобие