Dropout2D¶
Описание¶
Этот модуль выполняет как и 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.]]]]