日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸出層所用的激活函數,要根據求解問題的性質決定。一般地,

  • 回歸問題可以使用恒等函數,也就是說會將輸入按原樣輸出;
  • 二元分類問題可以使用 sigmoid 函數;
  • 多元分類問題可以使用 softmax 函數;

1. softmax 函數定義


用圖表示 softmax 函數的話,如圖 3-22所示。圖 3-22中,softmax 函數的輸出通過箭頭與所有的輸入信號相連。這是因為,從式(3.10)可以看出,輸出層的各個神經元都受到所有輸入信號的影響。

2. softmax 函數實現

在 IPython 中實現過程:

In [1]: import numpy as npIn [2]: a = np.array([0.3, 2.9, 4.0])In [3]: exp_a = np.exp(a)In [4]: exp_a
Out[4]: array([ 1.34985881, 18.17414537, 54.59815003])In [5]: sum_exp_a = np.sum(exp_a)In [6]: sum_exp_a
Out[6]: 74.1221542101633In [7]: y = exp_a/sum_exp_aIn [8]: y
Out[8]: array([0.01821127, 0.24519181, 0.73659691])In [9]: 

將其封裝成函數顯示為:

In [9]: def softmax(x):...:     exp_x = np.exp(x)...:     sum_exp_x = np.sum(exp_x)...:     y = exp_x/sum_exp_x...:     return y...:     In [10]: a = np.array([0.3, 2.9, 4.0])In [11]: softmax(a)
Out[11]: array([0.01821127, 0.24519181, 0.73659691])In [12]: 

3. softmax 函數缺陷

softmax 函數的實現中要進行指數函數的運算,但是此時指數函數的值很容易變得非常大。比如,e10 的值會超過 20000,e100 會變成一個后面有 40 多個 0 的超大值,e1000 的結果會返回一個表示無窮大的 inf 。如果在這些超大值之間進行除法運算,結果會出現“不確定”的情況,也就是人們常說的發生溢出問題。

4. softmax 函數改進


式(3.11)說明,在進行 softmax 的指數函數的運算時,加上(或者減去)某個常數并不會改變運算的結果。這里的 C 可以使用任何值,但是為了防止溢出,一般會使用輸入信號中的最大值。我們來看一個具體的例子。

In [13]: a = np.array([1010, 1000, 990])In [14]: np.exp(a)/ np.sum(np.exp(a))
Out[14]: array([nan, nan, nan])In [16]: c = np.max(a)In [17]: c
Out[17]: 1010In [18]: a - c
Out[18]: array([  0, -10, -20])In [19]: np.exp(a-c)/np.sum(np.exp(a-c))
Out[19]: array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])In [20]: 

如該例所示,通過減去輸入信號中的最大值(上例中的 c ),我們發現原本為 nannot a number,不確定)的地方,現在被正確計算了。綜上,我們可以像下面這樣實現 softmax 函數。

In [22]: def softmax(a):...:     c = np.max(a)...:     exp_a = np.exp(a-c)...:     sum_exp_a = np.sum(exp_a)...:     y = exp_a / sum_exp_a...:     return y...:     In [23]: 

5. softmax 函數特征

使用 softmax() 函數,可以按如下方式計算神經網絡的輸出。

In [5]: a = np.array([0.3, 2.9 ,4.0])In [6]: y = softmax(a)In [7]: y
Out[7]: array([0.01821127, 0.24519181, 0.73659691])In [8]: np.sum(y)
Out[8]: 1.0In [9]: 

如上所示,softmax 函數的輸出是 0.0 到 1.0之間的實數。并且,softmax 函數的輸出值的總和是 1。輸出總和為 1 是 softmax 函數的一個重要性質。正因為有了這個性質,我們才可以把 softmax 函數的輸出解釋為“概率”。

比如,上面的例子可以解釋成 y[0] 的概率是 0.018(1.8%),y[1] 的概率是 0.245(24.5%),y[2] 的概率是0.737(73.7%)。

這里需要注意的是,即便使用了 softmax 函數,各個元素之間的大小關系也不會改變。這是因為指數函數(y = exp(x))是單調遞增函數。實際上,上例中 a 的各元素的大小關系和 y 的各元素的大小關系并沒有改變。比如,a 的最大值是第 2 個元素,y 的最大值也仍是第 2 個元素。

一般而言,神經網絡只把輸出值最大的神經元所對應的類別作為識別結果。并且,即便使用 softmax 函數,輸出值最大的神經元的位置也不會變。

因此,神經網絡在進行分類時,輸出層的 softmax 函數可以省略。在實際的問題中,由于指數函數的運算需要一定的計算機運算量,因此輸出層的 softmax 函數一般會被省略。

6. 輸出層神經元數量

輸出層的神經元數量需要根據待解決的問題來決定。

對于分類問題,輸出層的神經元數量一般設定為類別的數量。比如,對于某個輸入圖像,預測是圖中的數字 0 到 9 中的哪一個的問題(10 類別分類問題),可以像圖3-23 這樣,將輸出層的神經元設定為 10 個。

如圖 3-23 所示,在這個例子中,輸出層的神經元從上往下依次對應數字 0, 1, . . ., 9。此外,圖中輸出層的神經元的值用不同的灰度表示。這個例子中神經元 y2 顏色最深,輸出的值最大。這表明這個神經網絡預測的是 y2 對應的類別,也就是“2”。

參考:《深度學習入門:基于Python的理論與實現》

總結

以上是生活随笔為你收集整理的机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。