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

3.5 損失函數

損失函數是絕對網絡學習質量的關鍵。無論什么樣的網絡結構,如果使用的損失函數不正確,最終都將難以訓練出正確的模型。這里先介紹幾個常用的loss函數。

損失函數的作用是用于描述模型預測值與真實值的差距大小。一般有兩種比較常見的算法:均值平方差(MSE)和交叉熵,下面除了對這兩種算法進行介紹,還介紹了自定義損失函數。

3.5.1 均值平方差

均值平方差(Mean Squared Error,MSE),也稱“均方誤差”,在神經網絡中主要是表達預測值與真實值之間的差異。在數理統計中,均方誤差是指參數估計值與參數真實值之差平方的期望值。其公式定義如下,主要是對每個真實值與預測值相減的平方取平均值。

均方誤差的值越小,表明模型越好。類似的損失算法還有均方根誤差RMSE(將MSE開平方)、平方絕對值誤差MAD(對一個真實值與預測值相減的絕對值取平均值)等。

注意:在神經網絡計算中,預測值要與真實值控制在同樣的數據分布內,假設將預測值經過sigmoid激活函數得到取值為0~1,那么真實值也歸一化成0~1。這樣在進行loss計算時才會有較好的效果。

3.5.2 交叉熵

交叉熵也是loss算法的一種,一般用在分類問題上,表達的意識為預測輸入樣本屬于某一類的概率。其表達式如下式:

式中,y代表真實值分類(0或1),a代表預測值。交叉熵也是值越小,代表預測結果越準。

注意:這里用于計算的a也是通過分布統一化處理的(或者是經過sigmoid激活函數激活的),取值為0~1。如果真實值和預測值都是1,前面一項ylna就是1×ln(1)等于0,后一項(1-y)ln(1-a)也就是0×ln(0),loss為0,反之loss函數為其他數。

【例3-10】利用交叉熵實現一個簡單神經網絡。

運行程序,輸出如下:

3.5.3 自定義損失函數

對于理想的分類問題和回歸問題,可采用交叉熵或者MSE損失函數,但是對于一些實際的問題,理想的損失函數可能在表達上不能完全表達損失情況,以至于影響對結果的優化。例如,對于產品銷量預測問題,表面上是一個回歸問題,可使用MSE損失函數。在實際情況下,當預測值大于實際值時,損失值應是正比于商品成本的函數;當預測值小于實際值時,損失值是正比于商品利潤的函數,多數情況下商品成本和利潤是不對等的。自定義損失函數如下:

TensorFlow中,通過以下代碼實現自定義損失函數:

其中,

·tf.greater(x,y),返回x>y的判斷結果的bool型Tensor,當Tensorx,y的維度不一致時,采取廣播(broadcasting)機制。

·tf.where(condition,x=None,y=None,name=None),根據condition選擇x(if true)ory(if false)。

【例3-11】使用自定義損失函數實現一個簡單的神經網絡。

運行程序,輸出如下:

主站蜘蛛池模板: 汝南县| 乌鲁木齐市| 松阳县| 河南省| 汉源县| 汕尾市| 青冈县| 河东区| 富宁县| 都昌县| 阜宁县| 历史| 高青县| 彭水| 安阳市| 手游| 郧西县| 论坛| 安图县| 石泉县| 呼伦贝尔市| 吉隆县| 海宁市| 义马市| 和田县| 莱州市| 墨脱县| 无为县| 旬邑县| 灌阳县| 洪泽县| 成安县| 湟中县| 扎赉特旗| 固原市| 赤水市| 万载县| 巴中市| 祁连县| 石棉县| 娄烦县|