РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить