SoftMax¶
Description¶
This module applies the softmax function to the input tensor. Softmax is a generalization of the logistic function for the multidimensional case, determined by the formula:
The softmax function is used along the tensor depth (along the maps) and scales their values so that the elements lie in the range [0, 1] and add up to 1, i.e. if there is a tensor of shape (N, C, H, W), where N - batch size, C - number of maps (channels), H - map height, W - map width, provided that each element of the maps is x_{nchw}\in{R}, then when passing through the softmax function x_{nchw}\in[0, 1], whereby \displaystyle\sum_{c=1}^C x_{nchw} = 1.
Softmax is often used for the last layer of deep neural networks for classification tasks. To train the neural network, cross entropy is used as the loss function.
Initializing¶
def __init__(self, name=None):
Parameters
Parameter | Allowed types | Description | Default |
---|---|---|---|
name | str | Layer name | None |
Explanations
-
Examples¶
Necessary imports.
import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import SoftMax
Info
gpuarray
is required to properly place the tensor in the GPU
For simplicity, let us take maps of unit height:
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.]]]