,,Softmax函数原理及Python实现过程解析

,,Softmax函数原理及Python实现过程解析

本文主要介绍Softmax函数的原理以及Python实现过程的分析。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考一下。

Softmax原理

Softmax函数用于归一化分类结果并形成概率分布。类似于二进制分类中的Sigmoid函数。

对于一个k维向量Z,我们想把这个结果转换成k个类别的概率分布p(z)。可以用Max来实现上述结果,具体计算公式为:

对于K维向量Z,其中ziR,我们可以通过指数函数变换将元素的范围变换到(0,),然后我们对所有元素求和将结果缩放到[0,1]形成概率分布。

其他常见的归一化方法,如max-min、z-score等,都不能保证每个元素都是正的,总和都是1。

Softmax性质

输入向量x加上常数c,得到softmax的沉降结果不变,即:

我们用softmax(x)的第I个元素的计算来证明:

函数实现

因为指数函数的放大效应太明显,如果直接用softmax计算公式

函数实现时容易造成数据溢出(overflow)。所以我们在实现的时候利用了函数的性质:先处理输入的数据,再用计算公式进行计算。具体实施步骤如下:

找出每个向量X的最大值C;

减去每个向量的最大值C得到向量y=x-C;

用公式计算,soft max(x)=soft max(x-c)=soft max(y)

代码如下:

将numpy作为np导入

def softmax(x):

'''

最大功能实现

参数:

x-一个二维矩阵,m * n,其中m代表向量的个数,n代表向量的维数。

返回:

最大计算结果

'''

assert(len(X.shape)==2)

row_max=np.max(X,axis=axis)。整形(-1,1)

X -=行最大值

X_exp=np.exp(X)

s=X_exp/np.sum(X_exp,axis=axis,keepdims=True)

返回s

测试它:

a=[[1,2,3],[-1,-2,-3]]

b=[[1,2,3]]

c=[1,2,3]

a=np.array(a)

b=np.array(b)

c=np.array

打印(softmax(a))

打印(softmax(b))

print(softmax(c)) #错误

输出是:

[[ 0.09003057 0.24472847 0.66524096]

[ 0.66524096 0.24472847 0.09003057]]

[[ 0.09003057 0.24472847 0.66524096]]

回溯(最近一次呼叫):

assert(len(X.shape)==2)

断言错误

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: