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

Класс Dropout2d

Класс Dropout2d применяет пространственный dropout к 2D картам признаков. В отличие от обычного Dropout, который случайно обнуляет отдельные элементы тензора, Dropout2d обнуляет целые карты признаков. Первый параметр p задаёт вероятность обнуления канала, второй параметр inplace определяет, выполнять ли операцию на месте.

Синтаксис

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

Пример

Давайте создадим модуль dropout с вероятностью обнуления 0.5:

import torch import torch.nn as nn dropout = nn.Dropout2d(p=0.5) print(dropout)

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

Dropout2d(p=0.5, inplace=False)

Пример

Применим dropout к 4D тензору (batch, channels, height, width):

import torch import torch.nn as nn torch.manual_seed(0) dropout = nn.Dropout2d(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([ [ [[0.0, 0.0], [0.0, 0.0]], [[10.0, 12.0], [14.0, 16.0]], ] ])

Обратите внимание: обнулился целый канал (первая карта признаков), а значения второго канала были умножены на 1/(1-p)=2 для сохранения математического ожидания.

Пример

Применим dropout в режиме обучения и оценки:

import torch import torch.nn as nn torch.manual_seed(0) dropout = nn.Dropout2d(p=0.3) t = torch.ones(1, 3, 2, 2) # Training mode - dropout active dropout.train() res_train = dropout(t) print("Training mode:") print(res_train) # Evaluation mode - dropout disabled dropout.eval() res_eval = dropout(t) print("Evaluation mode:") print(res_eval)

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

Training mode: tensor([ [ [[0.0, 0.0], [0.0, 0.0]], [[0.0, 0.0], [0.0, 0.0]], [[1.4286, 1.4286], [1.4286, 1.4286]], ] ]) Evaluation mode: tensor([ [ [[1.0, 1.0], [1.0, 1.0]], [[1.0, 1.0], [1.0, 1.0]], [[1.0, 1.0], [1.0, 1.0]], ] ])

Пример

Используем Dropout2d внутри свёрточной сети:

import torch import torch.nn as nn class SimpleConvNet(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 16, 3, padding=1) self.conv2 = nn.Conv2d(16, 32, 3, padding=1) self.dropout = nn.Dropout2d(p=0.25) self.fc = nn.Linear(32 * 8 * 8, 10) def forward(self, x): x = self.conv1(x) x = torch.relu(x) x = self.dropout(x) x = self.conv2(x) x = torch.relu(x) x = x.view(x.size(0), -1) x = self.fc(x) return x model = SimpleConvNet() t = torch.randn(4, 3, 8, 8) res = model(t) print(res.shape)

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

torch.Size([4, 10])

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

  • класс Dropout,
    который применяет обычный dropout к отдельным элементам тензора
  • класс Dropout1d,
    который применяет пространственный dropout к 1D картам признаков
  • класс Dropout3d,
    который применяет пространственный dropout к 3D картам признаков
  • класс Conv2d,
    который выполняет двумерную свёртку и часто используется вместе с dropout
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить