Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
350 of 769 menu
◀ ▶

Класс GLU

Класс GLU применяет гейтированную линейную активацию ко входному тензору. Он разделяет вход на две равные части по размерности признаков (по умолчанию последней оси), затем применяет функцию sigmoid к одной части, а другую оставляет без изменений, после чего выполняет поэлементное умножение. Первым параметром конструктора принимается dim - ось, по которой происходит разделение (по умолчанию -1).

Синтаксис

torch.nn.GLU(dim=-1)

Параметры

Модуль принимает один параметр:

  • dim - ось, по которой входной тензор будет разделён на две части. Значение по умолчанию - -1 (последняя ось).

Пример использования с тензором

Рассмотрим простой пример применения GLU к тензору размерности (2, 6):

import torch t = torch.tensor([ [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], [7.0, 8.0, 9.0, 10.0, 11.0, 12.0] ]) glu = torch.nn.GLU(dim=-1) res = glu(t) print(res)

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

tensor([ [ 1.0000, 2.0000, 3.0000], [ 7.0000, 8.0000, 9.0000] ])

Входной тензор был разделён пополам по последней оси: первая половина (1, 2, 3) и (7, 8, 9) осталась без изменений, а вторая половина (4, 5, 6) и (10, 11, 12) была преобразована через sigmoid. Затем произошло поэлементное умножение.

Пример использования в нейронной сети

Рассмотрим встраивание GLU в последовательную модель:

import torch import torch.nn as nn model = nn.Sequential( nn.Linear(10, 8), nn.GLU(dim=-1), nn.Linear(4, 2) ) x = torch.randn(5, 10) res = model(x) print(res.shape)

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

torch.Size([5, 2])

Сначала линейный слой преобразует вход размерности (5, 10) в (5, 8). Затем GLU разделяет размерность 8 на две части по 4 и применяет механизм гейтирования, на выходе получается тензор (5, 4). Финальный линейный слой уменьшает размерность до (5, 2).

Пример с указанием оси

Продемонстрируем работу GLU с трёхмерным тензором, указав ось для разделения:

import torch t = torch.randn(2, 6, 4) glu = torch.nn.GLU(dim=1) res = glu(t) print(res.shape)

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

torch.Size([2, 3, 4])

При указании dim=1 разделение происходит по оси с размерностью 6, в результате размерность этой оси уменьшается вдвое (с 6 до 3).

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

  • класс ReLU,
    который применяет функцию выпрямления
  • класс Sigmoid,
    который применяет сигмоидальное преобразование
  • класс Linear,
    который реализует линейное преобразование
  • класс SiLU,
    который является более мягкой альтернативой GLU
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить