1. 程式人生 > >【機器學習】輸出層的設計

【機器學習】輸出層的設計

神經網路可以用於分類和迴歸問題,但是最後在輸出時需要根據情況來設定輸出層的啟用函式。一般來說,

  • 迴歸問題:恆等函式
  • 分類問題:softmax函式

https://blog.csdn.net/u011240016/article/details/85121601

恆等函式與softmax函式

恆等函式:輸入 = 輸出

softmax函式

y k

= e x p ( a k
)
i = 1 n
e x p ( a i )
y_k = \frac{exp(a_k)} {\sum_{i=1}^nexp(a_i)}

其中 a k a_k 是輸入訊號,即前層神經元的輸出, y k y_k 是第k個神經元的輸出,n是輸出層神經元的個數。

# softmax
def softmax(x):
  return np.exp(x) / np.exp(x).sum()

a = np.array([0.3, 2.9, 4.0])
softmax(a)

softmax處理溢位問題

在這裡插入圖片描述

在分子分母上同時減去某個常數,為了防止溢位,我們可以將 C C' 設定為輸入訊號的最大值。

# 防止溢位
def softmax(x):
  c = np.max(x)
  exp_x = np.exp(x - c)
  sum_exp_x = np.sum(exp_x)
  return exp_x / sum_exp_x
  
a = np.array([1010, 1000, 990])

softmax(a) # array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])

Softmax函式的輸出在0.0~1.0之間,且輸出值的總和為1,所以可以將softmax函式的輸出解釋為概率

輸出層的神經元數量

需要根據具體問題來定,比如手寫數字識別,輸出層就設定為10個神經元即可。

END.

完全參考:

《深度學習入門:基於Python的理論和實現》