Python 稳定的Softmax函数返回错误的输出

Python 稳定的Softmax函数返回错误的输出,python,numpy,math,neural-network,softmax,Python,Numpy,Math,Neural Network,Softmax,我实现了Softmax函数,后来发现它必须稳定才能保持数值稳定(duh)。现在,它又不稳定了,因为即使从我的向量中减去max(x),给定的向量值仍然太大,无法成为e的幂。这是我用来确定错误的代码的图片,这里的向量是前向传播的样本输出向量: 我们可以清楚地看到,这些值太大了,我得到的不是概率,而是非常小的数字,这导致了小的误差,导致梯度消失,最终使网络无法学习。你完全正确,仅仅翻译softmax的数学定义可能会使其不稳定,这就是为什么在进行任何计算之前,必须减去x的最大值 你的实现是正确的,消

我实现了Softmax函数,后来发现它必须稳定才能保持数值稳定(duh)。现在,它又不稳定了,因为即使从我的向量中减去max(x),给定的向量值仍然太大,无法成为e的幂。这是我用来确定错误的代码的图片,这里的向量是前向传播的样本输出向量:



我们可以清楚地看到,这些值太大了,我得到的不是概率,而是非常小的数字,这导致了小的误差,导致梯度消失,最终使网络无法学习。

你完全正确,仅仅翻译softmax的数学定义可能会使其不稳定,这就是为什么在进行任何计算之前,必须减去x的最大值


你的实现是正确的,消失/爆炸梯度是一个独立的问题,你可能会遇到,这取决于你打算使用哪种神经网络。

Dang,我不知道该怎么办。我多次检查我的公式和代码,所以我认为这一定是一些实用的东西。你知道(根据经验)可能是什么吗?我正在使用ReLU btwI,您的代码没有任何问题。您的实现是正确的。您可能需要阅读此内容,以便回答:。您没有在代码中的任何位置使用ReLU,ReLU是一个将
x
映射到
max(0,x)
的函数。