Softmax не получает ни одного входного значения. Он принимает в качестве входных данных вектор всех значений текущего NN-слоя (под «значениями» я подразумеваю выходные данные предыдущей точки, произведенной матрицей ядра и добавленной к смещениям), и выдает распределение вероятностей , все значения которого попадают в диапазон [0, 1]
.
Итак, если ваш NN-слой, например, имеет 5 единиц / нейронов, функция softmax принимает в качестве входных значений 5 и нормализует их в распределение вероятностей, которое все 5 выходные значения находятся в диапазоне [0, 1]
, используя следующую формулу:
где в нашем примере: K = 5 и Z 1, Z 2 , ..., Z 5 - входной вектор.
Вот пример Java кода, реализующего softmax:
private double softmax(double input, double[] neuronValues) {
double total = Arrays.stream(neuronValues).map(Math::exp).sum();
return Math.exp(input) / total;
}