官术网_书友最值得收藏!

2.1.3 Python代碼小練習:計算Softmax函數

對于Python科學計算來說,最簡單的想法就是可以將數學公式直接表達成程序語言,可以說,Python滿足了這個想法。本小節將使用Python實現和計算一個深度學習中最為常見的函數——Softmax函數。至于這個函數的作用,現在不加以說明,筆者只是帶領讀者嘗試實現其程序的編寫。

Softmax函數的計算公式如下:

其中Vi是長度為j的數列V中的一個數,代入Softmax的結果就是先對每一個Vi取以e為底的指數計算變成非負,然后除以所有項之和進行歸一化,之后每個Vi就可以解釋成:在觀察到的數據集類別中,特定的Vi屬于某個類別的概率,或者稱作似然(Likelihood)。

提示:Softmax用以解決概率計算中概率結果大而占絕對優勢的問題。例如函數計算結果中的2個值ab,且a>b,如果簡單地以值的大小為單位衡量的話,那么在后續的使用過程中,a永遠被選用,而b由于數值較小不會被選擇,但是有時也需要使用數值較小的b,Softmax就可以解決這個問題。

Softmax按照概率選擇ab,由于a的概率值大于b,因此在計算時a經常會被取得,而b由于概率較小,取得的可能性也較小,但是也有概率被取得。

Softmax公式的代碼如下:

     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.array([[1,2,1,2,1,1,3]])

結果請讀者自行打印驗證。

主站蜘蛛池模板: 平凉市| 乐昌市| 克山县| 楚雄市| 宣化县| 大城县| 吉水县| 崇阳县| 盐津县| 吉木乃县| 江川县| 长治市| 梨树县| 凌海市| 抚松县| 马边| 南汇区| 安义县| 齐河县| 沅江市| 洛川县| 光山县| 尤溪县| 扶余县| 图木舒克市| 萝北县| 海原县| 奇台县| 巴东县| 商都县| 萨迦县| 武冈市| 金乡县| 宜兰市| 恩施市| 桐梓县| 咸阳市| 望江县| 峨眉山市| 巨野县| 纳雍县|