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
Для простоты возьмём карты единичной высоты:
np.random.seed(123)
batchsize, maps, h, w = 1, 3, 1, 3
data = gpuarray.to_gpu(np.random.randn(batchsize, maps, 1, 3).astype(np.float32))
print(data)
[[[[-1.0856307 0.99734545 0.2829785 ]]
[[-1.5062947 -0.5786002 1.6514366 ]]
[[-2.4266791 -0.42891264 1.2659363 ]]]]
softmax = SoftMax()
outdata = softmax(data)
print(outdata)
[[[[0.521327 0.69107646 0.13155064]]
[[0.34230885 0.14292283 0.51690024]]
[[0.13636416 0.16600075 0.35154915]]]]
print(np.sum(outdata.get(), axis=1))
[[[1. 1. 1.]]]