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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【TensorFlow】常用的损失函数及其TensorFlow实现

發(fā)布時(shí)間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【TensorFlow】常用的损失函数及其TensorFlow实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 損失函數(shù)

定義:將隨機(jī)事件或其有關(guān)隨機(jī)變量的取值映射為非負(fù)實(shí)數(shù)以表示該隨機(jī)事件的“風(fēng)險(xiǎn)”或“損失”的函數(shù)。
應(yīng)用:作為學(xué)習(xí)準(zhǔn)則與優(yōu)化問題相聯(lián)系,即通過最小化損失函數(shù)求解和評(píng)估模型。
分類:回歸問題、分類問題

2 回歸問題的損失函數(shù)

首先創(chuàng)建預(yù)測(cè)序列和目標(biāo)序列作為張量
預(yù)測(cè)序列是(-1,1)的等差數(shù)列,目標(biāo)值為0

sess = tf.Session() x_vals = tf.linspace(-1.,1.,500) target = tf.constant(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=1n?(targeti??f(xi?))2(1)
L2正則損失函數(shù)又稱歐拉損失函數(shù),是預(yù)測(cè)值f(xi)f(x_i)f(xi?)與目標(biāo)值targetitarget_itargeti?差值的平方和。
L2正則損失函數(shù)是非常有用的損失函數(shù),因?yàn)樗谀繕?biāo)值附近有更好的曲度。
機(jī)器學(xué)習(xí)算法利用這點(diǎn)收斂,并且離目標(biāo)越近收斂越慢。

l2 = tf.square(target - vals)

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=1n?targeti??f(xi?)(2)
L1正則損失函數(shù)又稱絕對(duì)值損失函數(shù),區(qū)別是L2是對(duì)差值求絕對(duì)值。
L1正則損失函數(shù)在目標(biāo)值附近不平滑,不能很好地收斂。

l1 = tf.abs(target - vals)

2.3 Pseudo-Huber損失函數(shù)

Pseudo-Huber損失函數(shù)是Huber損失函數(shù)的連續(xù)、平滑估計(jì)。
它試圖利用L1和L2正則削減極值處的陡峭,使得目標(biāo)值附近連續(xù)。
這個(gè)函數(shù)在目標(biāo)附近是凸的,并且對(duì)數(shù)據(jù)中的游離點(diǎn)較不敏感。
具有上述的兩個(gè)損失函數(shù)的優(yōu)點(diǎn)。需要一個(gè)額外的參數(shù)delta決定曲線的斜率。
它的表達(dá)式依賴參數(shù)δ\deltaδ。后面會(huì)圖示δ1=0.25\delta_1=0.25δ1?=0.25δ2=5\delta_2=5δ2?=5的區(qū)別:

delta1 = tf.constant(0.25) ph_y_vals1 = tf.multiply(tf.square(delta1), tf.sqrt(1. +tf.square(target - x_vals)/delta1) - 1.) delta2 = tf.constant(5) ph_y_vals2 = tf.multiply(tf.square(delta1), tf.sqrt(1. +tf.square(target - x_vals)/delta1) - 1.)

3 分類問題的損失函數(shù)

3.1 Hinge損失函數(shù)

Hinge損失函數(shù)主要用來評(píng)估SVM算法,但有時(shí)也用來評(píng)估神經(jīng)網(wǎng)絡(luò)算法。
在本例中是計(jì)算兩個(gè)目標(biāo)類(-1,1)之間的損失。
下面的代碼中,使用目標(biāo)值1,所以預(yù)測(cè)值離1越近,損失函數(shù)值越小:

hinge_y_vals = tf.maximum(0.,1.-tf.multiply(target,x_vals)) hinge_y_out = sess.run(hinge_y_vals)

3.2 兩類交叉熵?fù)p失函數(shù)

兩類交叉熵?fù)p失函數(shù)又叫邏輯損失函數(shù)
當(dāng)預(yù)測(cè)兩類目標(biāo)0或者1時(shí),希望度量預(yù)測(cè)值到真實(shí)分類值(0或者1)的距離,
這個(gè)距離經(jīng)常是0到1之間的實(shí)數(shù)。為了度量這個(gè)距離,可以使用信息論中的交叉熵

ce_y_vals = -tf.multiply(target, tf.log(x_vals)-tf.multiply((1.-target),tf.log(1.-x_vals))) ce_y_out = sess.run(ce_y_vals)

3.3 sigmoid交叉熵?fù)p失函數(shù)

sigmoid交叉熵?fù)p失函數(shù)與上一個(gè)損失函數(shù)非常類似,
不同的是,它先把x_vals值通過sigmoid函數(shù)轉(zhuǎn)換,再計(jì)算交叉熵?fù)p失

sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(logits=x_vals,labels=targets) sigmoid_y_out = sess.run(sigmoid_y_vals)

3.4 加權(quán)交叉熵?fù)p失函數(shù)

加權(quán)交叉熵?fù)p失函數(shù)是Sigmoid交叉熵?fù)p失函數(shù)的加權(quán),對(duì)正目標(biāo)加權(quán)。
下面的例子中將正目標(biāo)加權(quán)權(quán)重設(shè)為0.5

weight = tf.constant(0.5) ce_weighted_y_vals = tf.nn.weighted_cross_entropy_with_logits(x_vals, targets, weight) ce_weighted_y_out = sess.run(ce_weighted_y_vals)

3.5 Softmax交叉熵?fù)p失函數(shù)

Softmax交叉熵?fù)p失函數(shù)只針對(duì)單個(gè)目標(biāo)分類的計(jì)算損失。
通過softmax函數(shù)將輸出結(jié)果轉(zhuǎn)化成概率分布,然后計(jì)算真值概率分布的損失。

unscaled_logits = tf.constant([[1.,-3.,10.]]) target_dist = tf.constant([[0.1,0.02,0.88]]) softmax_xentropy = tf.nn.softmax_cross_entropy_with_logits(logits=unscaled_logits,labels=target_dist) print(sess.run(softmax_xentropy))

3.6 稀疏Softmax交叉熵?fù)p失函數(shù)

稀疏Softmax交叉熵?fù)p失函數(shù)和上一個(gè)損失函數(shù)類似
它把目標(biāo)分類為true的轉(zhuǎn)化成index
而Softmax交叉熵?fù)p失函數(shù)將目標(biāo)轉(zhuǎn)成概率分布

unscaled_logits = tf.constant([[1.,-3.,10.]]) sparse_target_dist = tf.constant([2]) sparse_xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=unscaled_logits,labels=sparse_target_dist) print(sess.run(sparse_xentropy))

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实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。