SoftMax函数主要用于神经网络输出层设计,通过纳皮尔常数e的指数形式对输出层原始数组进行转换,对转换后数组求和,计算每个元素与数组求和后所占比例。由于softmax输出数组中所有元素之和为1,因此输出层使用softmax函数进行转换后相当于求每个元素概率。
python实现:
import numpy as np
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) #防止溢出
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
java实现:
public double[] softMax(double[] arr) {
int length = arr.length;
Arrays.sort(arr);
double max = arr[length - 1];
double[] exp_a = new double[arr.length];
for(int i = 0; i < length; i++) {
exp_a[i] = Math.pow(Math.E, arr[i] - max);
}
double sum = 0;
for(int i = 0; i < length; i++) {
sum += exp_a[i];
}
double[] result = new double[length];
for(int i = 0; i < length; i++) {
result[i] = exp_a[i] / sum;
}
return result;
}