Класс Dropout3d
Класс Dropout3d применяет регуляризацию dropout к трехмерным данным. Во время обучения он случайно обнуляет целые каналы (глубинные срезы) входного тензора с вероятностью p. Это помогает предотвратить переобучение моделей, работающих с объемными данными, такими как видео или трехмерные изображения. Основным параметром является вероятность отключения каналов, остальные параметры управляют режимом работы и поведением во время оценки.
Синтаксис
torch.nn.Dropout3d(p=0.5, inplace=False)
Параметры класса:
-
p- вероятность обнуления канала (по умолчанию 0.5) -
inplace- выполнять операцию на месте (по умолчанию False)
Пример
Давайте создадим слой Dropout3d с вероятностью 0.3 и применим его к трехмерному тензору:
import torch
torch.manual_seed(0)
dropout = torch.nn.Dropout3d(p=0.3)
t = torch.randn(1, 2, 3, 4, 5)
res = dropout(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 2, 3, 4, 5])
Пример
Теперь рассмотрим, как слой обнуляет целые каналы, а не отдельные элементы. Выведем значения первого канала:
import torch
torch.manual_seed(0)
dropout = torch.nn.Dropout3d(p=0.5)
t = torch.ones(1, 2, 2, 2, 2)
res = dropout(t)
print(res)
Результат выполнения кода:
tensor([[[[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]],
[[[2., 2.],
[2., 2.]],
[[2., 2.],
[2., 2.]]]]])
Пример
При использовании Dropout3d в режиме оценки слой не применяет регуляризацию и масштабирует данные. Убедимся в этом:
import torch
torch.manual_seed(0)
dropout = torch.nn.Dropout3d(p=0.5)
dropout.eval()
t = torch.ones(1, 2, 2, 2, 2)
res = dropout(t)
print(res)
Результат выполнения кода:
tensor([[[[[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.]]],
[[[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.]]]]])
Смотрите также
-
класс
Dropout,
который применяет регуляризацию к отдельным элементам -
класс
Dropout1d,
который обнуляет целые каналы для одномерных данных -
класс
Dropout2d,
который обнуляет целые каналы для двумерных данных -
класс
AlphaDropout,
который применяет альфа-дропаут с самомасштабированием