SoftMax

Описание

Info

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

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

Этот модуль применяет софтмакс-функцию ко входному тензору. Softmax — это обобщение логистической функции для многомерного случая, определяется по формуле:

\begin{equation}\label{eq:softmax} \sigma(z)_i = \frac{e^{z_i}}{\sum \limits_{k=1}^{K} e^{z_k}} \end{equation}

Софтмакс-функция применяется вдоль измерения глубины тензора (вдоль карт) и масштабирует их значения так, чтобы элементы лежали в диапазоне [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.]]]