softmax溢出问题

tech2022-08-11  157

softmax函数: python代码: def softmax(a): exp_a=np.exp(a) exp_sum=np.sum(exp_a) y=exp_a/exp_sum return y

但是上述代码在计算机上运算的问题在于,指数函数容易出现无穷大数而导致溢出错误,如e1=2.718281828459045,e100=2.6881171418161356e+43,e1000=inf,这些无穷大无法进行除法运算,就出现OverflowError错误,这是因为计算机能够处理的“数”必须在4字节或者8字节的有限数值范围内。 3. 解决方案: 函数表达式中添加一个常数项: 式(3.11)说明,在进行softmax 的指数函数的运算时,加上(或者减去) 某个常数并不会改变运算的结果。这里的 C’ 可以使用任何值,但是为了防 止溢出,一般会使用输入信号中的最大值。

例如,在具体案例中,a=[1010,1000,999],c=max(a)=1010 则 exp(a-c)=[ 9.99954600e-01, 4.53978686e-05, 2.06106005e-09],就不会出现溢出error了。

参考文献: 深度学习:基于Python的理论与实现

最新回复(0)