Python implementa la función de activación softmax

función softmax
Inserte la descripción de la imagen aquí

>>> a = np.array([0.3,2.9,4.0])
>>> exp_a=np.exp(a)
>>> print(exp_a)
[ 1.34985881 18.17414537 54.59815003]
>>> sum_exp_a = np.sum(exp_a)
>>> print(sum_exp_a)
74.1221542101633
>>> y=exp_a/sum_exp_a
>>> y
array([0.01821127, 0.24519181, 0.73659691])
>>>
def softmax(x):
    exp_a = np.exp(x)
    sum_exp_a = np.sum(exp_a)
    y = exp_a /sum_exp_a
    return y

Hay un problema con la versión anterior:

>>> a = np.array([1010,1000,990])
>>> np.exp(a)/np.sum(np.exp(a))
__main__:1: RuntimeWarning: overflow encountered in exp
__main__:1: RuntimeWarning: invalid value encountered in true_divide
array([nan, nan, nan])
>>>



Derivación de fórmulas: sumar o restar un valor no afecta el resultado
Reste un valor máximo para obtener el valor correcto

>>> a - c
array([  0, -10, -20])
>>> np.exp(a-c)/np.sum(np.exp(a-c))
array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])
>>>

Versión mejorada

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

Supongo que te gusta

Origin blog.csdn.net/WANGYONGZIXUE/article/details/110291014
Recomendado
Clasificación