本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。