Функция F.glu
Функция F.glu реализует механизм Gated Linear Unit (GLU). Она принимает входной тензор и размерность, по которой будет производиться разделение. Входной тензор должен иметь чётное количество элементов по указанной размерности. Функция разделяет тензор на две равные части, применяет функцию активации сигмоида ко второй части и умножает её на первую часть. Это позволяет модели контролировать поток информации и обучаться фильтровать нерелевантные признаки.
Синтаксис
torch.nn.functional.glu(input, dim=-1)
Параметры функции:
-
input(Tensor) - входной тензор, который будет преобразован; -
dim(int) - размерность, по которой будет производиться разделение. По умолчанию равно -1 (последняя размерность).
Пример с одномерным тензором
Давайте применим функцию glu к одномерному тензору из шести элементов:
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.glu(t)
print(res)
Результат выполнения кода:
tensor([1.0000, 1.9640, 2.8952])
Функция разделила тензор на две части: первую ([1, 2, 3]) и вторую ([4, 5, 6]). Ко второй части была применена сигмоида, а затем выполнено поэлементное умножение.
Пример с двумерным тензором
Рассмотрим работу функции с двумерным тензором, где разделение будет происходить по последней размерности:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1.0, 2.0, 3.0, 4.0],
[5.0, 6.0, 7.0, 8.0]
])
res = F.glu(t, dim=1)
print(res)
Результат выполнения кода:
tensor([
[0.9820, 1.9640],
[4.9750, 5.9640]
])
В этом примере тензор размерности 2x4 был разделён на две части по размерности 1 (столбцы). Первая часть содержит первые два столбца, вторая - оставшиеся два. Затем ко второй части была применена сигмоида и выполнено умножение с первой частью.
Пример с трёхмерным тензором
Покажем использование F.glu с трёхмерным тензором, где разделение будет происходить по размерности каналов:
import torch
import torch.nn.functional as F
t = torch.randn(2, 4, 3)
torch.manual_seed(0)
res = F.glu(t, dim=1)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 2, 3])
Выходной тензор имеет размерность 2x2x3, потому что по размерности 1 (каналы) количество элементов уменьшилось вдвое.
Смотрите также
-
функцию
sigmoid,
которая применяет сигмоидальную функцию активации к тензору -
функцию
softmax,
которая преобразует значения тензора в вероятности -
функцию
relu,
которая применяет функцию активации ReLU -
функцию
gumbel_softmax,
которая выполняет дискретное выборку с использованием Gumbel-Softmax