Класс Dropout1d
Класс Dropout1d предназначен для регуляризации одномерных данных путём случайного обнуления целых каналов или элементов тензора. Это помогает предотвратить переобучение модели. Первым параметром конструктор принимает вероятность обнуления канала p, которая может принимать значения от 0 до 1. Вторым параметром можно указать режим работы inplace для изменения входного тензора.
Синтаксис
torch.nn.Dropout1d(p=0.5, inplace=False)
Пример
Давайте создадим модуль Dropout1d с вероятностью обнуления 0.5 и применим его к одномерному тензору:
import torch
import torch.nn as nn
torch.manual_seed(0)
dropout = nn.Dropout1d(p=0.5)
t = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
res = dropout(t)
print(res)
Результат выполнения кода:
tensor([0., 0., 0., 0., 10.])
Пример
В режиме обучения dropout обнуляет случайные элементы и масштабирует оставшиеся на коэффициент 1/(1-p). В режиме оценки модуль возвращает данные без изменений:
import torch
import torch.nn as nn
torch.manual_seed(0)
dropout = nn.Dropout1d(p=0.3)
t = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
dropout.train()
train_res = dropout(t)
dropout.eval()
eval_res = dropout(t)
print(f"Train: {train_res}")
print(f"Eval: {eval_res}")
Результат выполнения кода:
Train: tensor([0.0000, 0.0000, 4.2857, 5.7143, 7.1429])
Eval: tensor([1., 2., 3., 4., 5.])
Пример
Dropout1d также может работать с двумерными тензорами (batch_size, channels, features), обнуляя целые каналы:
import torch
import torch.nn as nn
torch.manual_seed(0)
dropout = nn.Dropout1d(p=0.5)
t = torch.tensor([
[[1.0, 2.0], [3.0, 4.0]],
[[5.0, 6.0], [7.0, 8.0]]
])
res = dropout(t)
print(res)
Результат выполнения кода:
tensor([
[[2., 4.], [0., 0.]],
[[0., 0.], [14., 16.]]
])
Смотрите также
-
класс
Dropout,
который применяет dropout к произвольным данным -
класс
Dropout2d,
который применяет dropout к двумерным данным -
класс
Dropout3d,
который применяет dropout к трёхмерным данным -
класс
AlphaDropout,
который применяет альфа-dropout для самомасштабирующихся сетей