Dropout2D

Описание

Info

Родительский класс: Dropout

Производные классы: -

Этот модуль выполняет как и Dropout операцию исключения нейронов, но более масштабно: исключаются не отдельные элементы признаков, а целые карты. Т.е., грубо говоря, для тензора с размерностью (N, C, H, W), где N - размер батча, C - количество карт (каналов), H - высота карты, W - ширина карты, будет обнулено какое-то количество из C карт.

Инициализация

def __init__(self, p=0.5, rng=globalRng, slicing=None, inplace=False, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
p float Вероятность, с которой исключаются нейроны 0.5
rng object Объект генератора случайных чисел (бэкендозависимый) globalRng
slicing slice Срез, к которому применяется операция None
inplace bool Если True, то выходной тензор будет записан в памяти на место входного False
name str Имя слоя None

Пояснения

rng - генератор случайных чисел, который зависит от платформы, на которой проводятся расчёты, т.е. генератор бэкендозависимый: например, при использовании Nvidia-GPU и CUDA генератор формируется средствами библиотеки curand;


slicing - срез задаётся через встроенный в python объект slice, причём нужно учитывать, что индексы среза задаются для уплощённого тензора данных;


inplace - флаг, показывающий, нужно ли выделять дополнительные ресурсы памяти для результата. Если True, то выходной тензор будет записан в памяти на место входного, что может негативно отразиться на работе сети, если входной тензор должен принимать участие в расчётах на других ветках графа.

Примеры

Необходимые импорты.

import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import Dropout2D

Info

gpuarray необходим для правильного размещения тензора на GPU

batchsize, maps, h, w = 1, 4, 3, 3
data = gpuarray.to_gpu(np.random.randint(1, 9, (batchsize, maps, h, w)).astype(np.float32))
print(data)
[[[[7. 6. 7.]
   [3. 5. 3.]
   [7. 2. 4.]]

  [[3. 4. 2.]
   [7. 2. 1.]
   [2. 7. 8.]]

  [[2. 1. 7.]
   [1. 8. 2.]
   [4. 7. 6.]]

  [[5. 1. 1.]
   [5. 2. 8.]
   [4. 3. 5.]]]]

Инициализируем модуль с параметрами по умолчанию:

dropout2d = Dropout2D()
print(dropout2d(data))
[[[[14. 12. 14.]
   [ 6. 10.  6.]
   [14.  4.  8.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 4.  2. 14.]
   [ 2. 16.  4.]
   [ 8. 14. 12.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]]]