python - 如何在 Python 中实现 Softmax 函数

标签 python numpy machine-learning logistic-regression softmax

来自 Udacity's deep learning class , y_i 的 softmax 就是简单的指数除以整个 Y 向量的指数之和:

enter image description here

其中S(y_i)y_i的softmax函数,e是指数,j是没有。输入向量 Y 中的列数。

我尝试了以下方法:

import numpy as np

def softmax(x):
    """Compute softmax values for each sets of scores in x."""
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum()

scores = [3.0, 1.0, 0.2]
print(softmax(scores))

返回:

[ 0.8360188   0.11314284  0.05083836]

但建议的解决方案是:

def softmax(x):
    """Compute softmax values for each sets of scores in x."""
    return np.exp(x) / np.sum(np.exp(x), axis=0)

它产生与第一个实现相同的输出,即使第一个实现显式地获取每列的差值和最大值,然后除以总和。

有人能用数学方法说明原因吗?一个正确一个错误?

实现在代码和时间复杂度方面是否相似?哪个更高效?

最佳答案

它们都是正确的,但从数值稳定性的角度来看,你的更好。

你开始

e ^ (x - max(x)) / sum(e^(x - max(x))

通过使用 a^(b - c) = (a^b)/(a^c) 我们有这个事实

= e ^ x / (e ^ max(x) * sum(e ^ x / e ^ max(x)))

= e ^ x / sum(e ^ x)

这是另一个答案所说的。您可以将 max(x) 替换为任何变量,它会取消。

关于python - 如何在 Python 中实现 Softmax 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34968722/

相关文章:

python - 在 OpenCV SIFT (Python) 中删除梯度方向直方图的高斯加权

python - 在 panda 数据框中插入复选框

python - log 或 exp 的溢出/数学范围错误

python - 无法将 RGB 图像读入 numpy 数组

python - 闭式岭回归

python - 从 pandas Dataframe 中删除重复数据

python - 将数据框列中的数字缩放到相同的比例

Python数组: Take two and skip two

python-3.x - Talos.Scan() 在完成排列之前短暂停止,没有错误

python - Tensorflow:如何从预训练的 CNN 的特定层提取图像特征?