SoftMax¶
Описание¶
Этот модуль применяет софтмакс-функцию ко входному тензору. Softmax — это обобщение логистической функции для многомерного случая, определяется по формуле:
Софтмакс-функция применяется вдоль измерения глубины тензора (вдоль карт) и масштабирует их значения так, чтобы элементы лежали в диапазоне [0, 1] и и в сумме давали 1, т.е. если есть тензор размерности (N, C, H, W), где N - размер батча, C - количество карт (каналов), H - высота карты, W - ширина карты, причём каждый элемент карт x_{nchw}\in{R}, то при прохождении черех софтмакс-функцию x_{nchw}\in[0, 1], причём \displaystyle\sum_{c=1}^C x_{nchw} = 1.
Часто софтмакс используется для последнего слоя глубоких нейронных сетей для задач классификации. Для обучения нейронной сети при этом в качестве функции потерь используется перекрёстная энтропия.
Инициализация¶
def __init__(self, name=None):
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
name | str | Имя слоя. | None |
Пояснения
-
Примеры¶
Необходимые импорты.
>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Modules import SoftMax
Info
gpuarray
необходим для правильного размещения тензора на GPU
Для простоты возьмём карты единичной высоты:
>>> batchsize, maps, h, w = 1, 3, 1, 3
>>> data = gpuarray.to_gpu(np.random.randn(batchsize, maps, 1, 3).astype(np.float32))
[[[[ 0.47143516 -1.1909757 1.432707 ]]
[[-0.3126519 -0.72058874 0.8871629 ]]
[[ 0.8595884 -0.6365235 0.01569637]]]]
>>> softmax = SoftMax()
>>> outdata = softmax(data)
>>> print(outdata)
[[[[0.3412047 0.2303298 0.5488582 ]]
[[0.15577234 0.36866897 0.31807783]]
[[0.50302297 0.4010012 0.13306393]]]]
>>> print(np.sum(outdata.get(), axis=1))
[[[1. 1. 1.]]]