РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
329 of 769 menu

Класс AlphaDropout

Класс AlphaDropout - это вариант обычного Dropout, который используется вместе с функцией активации SELU. В отличие от стандартного дропаута, AlphaDropout сохраняет математическое ожидание и дисперсию входных данных, что особенно важно для самонормализующихся сетей. При применении слоя часть нейронов случайным образом обнуляется, а оставшиеся значения масштабируются и смещаются так, чтобы статистики распределения остались неизменными.

Первым параметром конструктор принимает p - вероятность обнуления нейрона (по умолчанию 0.5). Вторым параметром можно передать inplace - флаг, определяющий, выполнять ли операцию на месте (по умолчанию False). Тренировочный режим управляется через метод train или eval модуля.

Синтаксис

torch.nn.AlphaDropout(p=0.5, inplace=False)

Пример

Создадим слой AlphaDropout с вероятностью обнуления 0.2 и применим его к тензору в тренировочном режиме:

import torch import torch.nn as nn torch.manual_seed(0) alpha_dropout = nn.AlphaDropout(p=0.2) t = torch.ones(1, 5) res = alpha_dropout(t) print(res)

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

tensor([ [1.0000, 0.0000, 1.0000, 1.0000, 0.0000] ])

Пример

Теперь переведём слой в режим оценки (инференс), чтобы убедиться, что он не изменяет входные данные:

import torch import torch.nn as nn torch.manual_seed(0) alpha_dropout = nn.AlphaDropout(p=0.2) t = torch.ones(1, 5) alpha_dropout.eval() res = alpha_dropout(t) print(res)

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

tensor([ [1., 1., 1., 1., 1.] ])

Пример

Встроим AlphaDropout в нейронную сеть и посмотрим на его поведение в сочетании с SELU:

import torch import torch.nn as nn torch.manual_seed(0) class Net(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(10, 20) self.selu = nn.SELU() self.dropout = nn.AlphaDropout(p=0.3) self.fc2 = nn.Linear(20, 5) def forward(self, x): x = self.fc1(x) x = self.selu(x) x = self.dropout(x) x = self.fc2(x) return x model = Net() t = torch.randn(2, 10) model.train() res = model(t) print(res)

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

tensor([ [ 0.2284, -0.2050, -0.1480, -0.1139, 0.0533], [ 0.3003, -0.2982, 0.0581, -0.1185, -0.2767] ], grad_fn=<AddmmBackward0>)

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

  • класс SELU,
    который является функцией активации, работающей в паре с AlphaDropout
  • класс Dropout,
    который является стандартным дропаутом без сохранения статистик
  • класс Dropout1d,
    который применяет дропаут к целым каналам одномерных данных
  • класс Dropout2d,
    который применяет дропаут к целым каналам двумерных данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить