Класс Dropout
Класс Dropout предназначен для регуляризации нейронных сетей.
В процессе обучения он случайным образом обнуляет часть элементов тензора
с заданной вероятностью p, что помогает предотвратить переобучение.
Оставшиеся элементы масштабируются на коэффициент 1 / (1 - p),
чтобы сохранить сумму активаций.
Основные параметры конструктора:
-
p- вероятность обнуления элемента (от 0 до 1). -
inplace- булевый флаг, определяющий, выполнять ли операцию над входным тензором без создания нового.
Синтаксис
torch.nn.Dropout(p=0.5, inplace=False)
Пример
Создадим слой Dropout и применим его к тензору:
import torch
torch.manual_seed(0)
dropout = torch.nn.Dropout(p=0.5)
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = dropout(t)
print(res)
Результат выполнения кода:
tensor([
[ 0.0000, 4.0000, 6.0000],
[ 8.0000, 0.0000, 0.0000],
])
Как видно, часть элементов стала нулевой, а оставшиеся были умножены на 2.
Пример
Dropout работает по-разному в режиме обучения и оценки. В режиме обучения элементы обнуляются, а в режиме оценки слой становится тождественным преобразованием:
import torch
torch.manual_seed(0)
dropout = torch.nn.Dropout(p=0.5)
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
dropout.eval()
res = dropout(t)
print(res)
Результат выполнения кода:
tensor([
[1., 2., 3.],
[4., 5., 6.],
])
Пример
Использование Dropout внутри полносвязной сети:
import torch
import torch.nn as nn
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(10, 20)
self.dropout = nn.Dropout(p=0.5)
self.fc2 = nn.Linear(20, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.dropout(x)
return self.fc2(x)
torch.manual_seed(0)
model = MyModel()
t = torch.randn(5, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([5, 1])
Смотрите также
-
слой
Dropout1d,
применяет регуляризацию к одномерным данным -
слой
Dropout2d,
используется для регуляризации каналов изображений -
слой
Dropout3d,
применяется к трехмерным данным -
слой
AlphaDropout,
реализует выпадение с сохранением среднего и дисперсии