【TensorFlow】常用的损失函数及其TensorFlow实现
1 損失函數(shù)
定義:將隨機事件或其有關(guān)隨機變量的取值映射為非負實數(shù)以表示該隨機事件的“風(fēng)險”或“損失”的函數(shù)。
應(yīng)用:作為學(xué)習(xí)準則與優(yōu)化問題相聯(lián)系,即通過最小化損失函數(shù)求解和評估模型。
分類:回歸問題、分類問題
2 回歸問題的損失函數(shù)
首先創(chuàng)建預(yù)測序列和目標序列作為張量
預(yù)測序列是(-1,1)的等差數(shù)列,目標值為0
2.1 L2正則損失函數(shù)
L=∑i=1n(targeti?f(xi))2(1)L=\sum_{i=1}^{n}(target_i-f(x_i))^2\tag{1}L=i=1∑n?(targeti??f(xi?))2(1)
L2正則損失函數(shù)又稱歐拉損失函數(shù),是預(yù)測值f(xi)f(x_i)f(xi?)與目標值targetitarget_itargeti?差值的平方和。
L2正則損失函數(shù)是非常有用的損失函數(shù),因為它在目標值附近有更好的曲度。
機器學(xué)習(xí)算法利用這點收斂,并且離目標越近收斂越慢。
2.2 L1正則損失函數(shù)
L=∑i=1n∣targeti?f(xi)∣(2)L=\sum_{i=1}^{n}|target_i-f(x_i)|\tag{2}L=i=1∑n?∣targeti??f(xi?)∣(2)
L1正則損失函數(shù)又稱絕對值損失函數(shù),區(qū)別是L2是對差值求絕對值。
L1正則損失函數(shù)在目標值附近不平滑,不能很好地收斂。
2.3 Pseudo-Huber損失函數(shù)
Pseudo-Huber損失函數(shù)是Huber損失函數(shù)的連續(xù)、平滑估計。
它試圖利用L1和L2正則削減極值處的陡峭,使得目標值附近連續(xù)。
這個函數(shù)在目標附近是凸的,并且對數(shù)據(jù)中的游離點較不敏感。
具有上述的兩個損失函數(shù)的優(yōu)點。需要一個額外的參數(shù)delta決定曲線的斜率。
它的表達式依賴參數(shù)δ\deltaδ。后面會圖示δ1=0.25\delta_1=0.25δ1?=0.25和δ2=5\delta_2=5δ2?=5的區(qū)別:
3 分類問題的損失函數(shù)
3.1 Hinge損失函數(shù)
Hinge損失函數(shù)主要用來評估SVM算法,但有時也用來評估神經(jīng)網(wǎng)絡(luò)算法。
在本例中是計算兩個目標類(-1,1)之間的損失。
下面的代碼中,使用目標值1,所以預(yù)測值離1越近,損失函數(shù)值越小:
3.2 兩類交叉熵損失函數(shù)
兩類交叉熵損失函數(shù)又叫邏輯損失函數(shù)
當預(yù)測兩類目標0或者1時,希望度量預(yù)測值到真實分類值(0或者1)的距離,
這個距離經(jīng)常是0到1之間的實數(shù)。為了度量這個距離,可以使用信息論中的交叉熵
3.3 sigmoid交叉熵損失函數(shù)
sigmoid交叉熵損失函數(shù)與上一個損失函數(shù)非常類似,
不同的是,它先把x_vals值通過sigmoid函數(shù)轉(zhuǎn)換,再計算交叉熵損失
3.4 加權(quán)交叉熵損失函數(shù)
加權(quán)交叉熵損失函數(shù)是Sigmoid交叉熵損失函數(shù)的加權(quán),對正目標加權(quán)。
下面的例子中將正目標加權(quán)權(quán)重設(shè)為0.5
3.5 Softmax交叉熵損失函數(shù)
Softmax交叉熵損失函數(shù)只針對單個目標分類的計算損失。
通過softmax函數(shù)將輸出結(jié)果轉(zhuǎn)化成概率分布,然后計算真值概率分布的損失。
3.6 稀疏Softmax交叉熵損失函數(shù)
稀疏Softmax交叉熵損失函數(shù)和上一個損失函數(shù)類似
它把目標分類為true的轉(zhuǎn)化成index
而Softmax交叉熵損失函數(shù)將目標轉(zhuǎn)成概率分布
4 matplotlib繪制損失函數(shù)
x_array = sess.run(x_vals) plt.plot(x_array,l2_y_out,'b-',label='L2 Loss') plt.plot(x_array,l1_y_out,'r--',label='L1 Loss') plt.plot(x_array,ph_y_out1,'k-.',label='PH Loss(0.25)') plt.plot(x_array,ph_y_out2,'g:',label='PH Loss(5.0)') plt.ylim(-0.2,0.4) plt.legend(loc='lower right', prop={'size':11}) plt.show()# 三、matplotlib繪制分類算法的損失函數(shù) plt.plot(x_array,hinge_y_out,'b-',label='Hinge Loss') plt.plot(x_array,ce_y_out,'r--',label='Cross Entropy Loss') plt.plot(x_array,sigmoid_y_out,'k-',label='Cross Entropy Sigmoid Loss') plt.plot(x_array,ce_weighted_y_out,'g:',label='Weighted Cross Entropy Loss(0.5)') plt.ylim(-1.5,3) plt.legend(loc='lower right',prop={'size':11}) plt.show()4.1 回歸算法的損失函數(shù)圖像
4.2 分類算法的損失函數(shù)圖像
總結(jié)
以上是生活随笔為你收集整理的【TensorFlow】常用的损失函数及其TensorFlow实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: 【ACL2020】Reasoning w