Функция log
Функция log вычисляет натуральный логарифм (по основанию e) от каждого элемента переданного тензора. На вход функция принимает тензор произвольной формы, а возвращает новый тензор той же формы, каждый элемент которого является натуральным логарифмом соответствующего элемента исходного тензора. Функция поддерживает автоматическое дифференцирование, что позволяет использовать её в графах вычислений нейронных сетей.
Синтаксис
torch.log(input, *, out=None)
Параметры функции:
-
input(Tensor) - входной тензор, для элементов которого вычисляется натуральный логарифм -
out(Tensor, optional) - тензор для записи результата (необязательный параметр)
Пример
Давайте вычислим натуральные логарифмы для элементов тензора:
import torch
t = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
res = torch.log(t)
print(res)
Результат выполнения кода:
tensor([0.0000, 0.6931, 1.0986, 1.3863, 1.6094])
Как видите, каждое число преобразовано в его натуральный логарифм.
Пример
Функция log также работает с многомерными тензорами:
import torch
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = torch.log(t)
print(res)
Результат выполнения кода:
tensor([
[0.0000, 0.6931, 1.0986],
[1.3863, 1.6094, 1.7918],
])
Пример
Вы можете использовать параметр out для записи результата в заранее созданный тензор:
import torch
t = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
out = torch.empty(5)
torch.log(t, out=out)
print(out)
Результат выполнения кода:
tensor([0.0000, 0.6931, 1.0986, 1.3863, 1.6094])
Пример
Так как натуральный логарифм определён только для положительных чисел, функция log возвращает -inf для нулевых значений и nan для отрицательных:
import torch
t = torch.tensor([0.0, 1.0, -2.0, 3.0])
res = torch.log(t)
print(res)
Результат выполнения кода:
tensor([-inf, 0.0000, nan, 1.0986])
Пример
Функция log поддерживает автоматическое дифференцирование, что важно для обучения нейронных сетей:
import torch
t = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
res = torch.log(t)
res.sum().backward()
print(t.grad)
Результат выполнения кода:
tensor([1.0000, 0.5000, 0.3333])
Градиент от log(x) равен 1/x, что и подтверждает результат.