上QQ阅读APP看书,第一时间看更新
1.2.3 使用Python实现softmax函数计算
对于Python科学计算来说,最简单的想法就是将数学公式直接表达成程序语言,可以说Python满足了这个想法。本小节将使用Python实现一个深度学习中最常见的函数——softmax函数。至于这个函数的作用,现在不加以说明,这里只是简单尝试一下这个函数代码的编写。
softmax函数的计算公式如下:
其中,Vi是长度为j的数列V中的一个数。带入softmax的结果实际上就是先对每一个Vi计算以e为底、Vi为幂次项的值,然后除以所有项之和进行归一化,之后每个Vi就可以解释成:在观察到的数据集类别中,特定的Vi属于某个类别的概率或者称作似然(Likelihood)。
提示:softmax函数用以解决概率计算中概率结果大而占绝对优势的问题。例如,函数计算结果中有两个值a和b,且a>b,如果简单地以值的大小为单位进行衡量,那么在后续的使用过程中a永远被选用,而b由于数值较小而不被选用;但是,有时候也需要使用数值小的b,那么softmax函数就可以解决这个问题。
softmax函数按照概率选择a和b,由于a的概率值大于b,所以在计算时a经常会被选中,而b由于概率较小,所以选中的可能性也较小,但是也有概率被选中。
softmax函数的代码如下:
【程序1-1】
import numpy def softmax(inMatrix): m,n = numpy.shape(inMatrix) outMatrix = numpy.mat(numpy.zeros((m,n))) soft_sum = 0 for idx in range(0,n): outMatrix[0,idx] = math.exp(inMatrix[0,idx]) soft_sum += outMatrix[0,idx] for idx in range(0,n): outMatrix[0,idx] = outMatrix[0,idx] / soft_sum return outMatrix
【代码解析】
当传入一个数列后,分别计算每个数值所对应的指数函数值,之后将其相加后计算每个数值在数值和中的概率。例如:
a = numpy.arry([[1,2,1,2,1,1,3]])
结果如下:
[[ 0.05943317 0.16155612 0.05943317 0.16155612 0.05943317 0.05943317 0.43915506]]