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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

tensorflow分类的loss函数_Tensorflow入门教程(三十三)——图像分割损失函数FocalLoss...

發(fā)布時間:2024/10/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow分类的loss函数_Tensorflow入门教程(三十三)——图像分割损失函数FocalLoss... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

常見的圖像分割損失函數(shù)有交叉熵,dice系數(shù),FocalLoss等。今天我將分享圖像分割FocalLoss損失函數(shù)及Tensorflow版本的復(fù)現(xiàn)。

1、FocalLoss介紹

FocalLoss思想出自何凱明大神的論文《Focal Loss for Dense Object Detection》,主要是為了解決one-stage目標(biāo)檢測中正負(fù)樣本比例嚴(yán)重失衡的問題。

FocalLoss是在交叉熵函數(shù)的基礎(chǔ)上進(jìn)行的改進(jìn),改進(jìn)的地方主要在兩個地方

(1)、改進(jìn)第一點如下公式所示。

首先在原有交叉熵函數(shù)基礎(chǔ)上加了一個權(quán)重因子,其中g(shù)amma>0,使得更關(guān)注于困難的、錯分的樣本。比如:若 gamma = 2,對于正類樣本來說,如果預(yù)測結(jié)果為0.97,那么肯定是易分類的樣本,權(quán)重值為0.0009,損失函數(shù)值就會很小了;對于正類樣本來說,如果預(yù)測結(jié)果為0.3,那么肯定是難分類的樣本,權(quán)重值為0.49,其損失函數(shù)值相對就會很大;對于負(fù)類樣本來說,如果預(yù)測結(jié)果為0.8,那么肯定是難分類的樣本,權(quán)重值為0.64,其損失函數(shù)值相對就會很大;對于負(fù)類樣本來說,如果預(yù)測結(jié)果為0.1,那么肯定是易分類的樣本,權(quán)重值為0.01,其損失函數(shù)值就會很小。而對于預(yù)測概率為0.5時,損失函數(shù)值只減少了0.25倍,所以FocalLoss減少了簡單樣本的影響從而更加關(guān)注于難以區(qū)分的樣本。

(2)、改進(jìn)第二點如下公式所示。

FocalLoss還引入了平衡因子alpha,用來平衡正負(fù)樣本本身的比例不均勻。alpha取值范圍0~1,當(dāng)alpha>0.5時,可以相對增加y=1所占的比例,保證正負(fù)樣本的平衡。

(3)、雖然在何凱明的試驗中,?認(rèn)為gamma為2是最優(yōu)的,但是不代表這個參數(shù)適合其他樣本,在實際應(yīng)用中還需要根據(jù)實際情況調(diào)整這兩個參數(shù):alpha和gamma。

2、FocalLoss公式推導(dǎo)

在github上已經(jīng)可以找到很多FocalLoss的實現(xiàn),如下二分類的FocalLoss實現(xiàn)。實現(xiàn)其實不是很難,但是在實際訓(xùn)練時會出現(xiàn)NAN的現(xiàn)象。

下面將簡單推導(dǎo)一下FocalLoss函數(shù)在二分類時的函數(shù)表達(dá)式。

FocalLoss函數(shù)可以表示如下公式所示:

假設(shè)網(wǎng)絡(luò)的最后輸出采用邏輯回歸函數(shù)sigmod,對于二分類問題(0和1),預(yù)測輸出可以表示為:

將上述公式帶入FocalLoss函數(shù)中,并進(jìn)行推導(dǎo)。

3、FocalLoss代碼實現(xiàn)

按照上面導(dǎo)出的表達(dá)式FocalLoss的偽代碼可以表示為:

其中,

從這里可以看到1-y_pred項可能為0或1,這會導(dǎo)致log函數(shù)值出現(xiàn)NAN現(xiàn)象,所以好需要對y_pred項進(jìn)行固定范圍值的截斷操作。最后在TensorFlow1.8下實現(xiàn)了該函數(shù)。

import?tensorflow?as?tfdef focal_loss(y_true, y_pred, alpha=0.25, gamma=2): epsilon = 1e-5 y_pred = tf.clip_by_value(y_pred, epsilon, 1 - epsilon) logits = tf.log(y_pred / (1 - y_pred)) weight_a = alpha * tf.pow((1 - y_pred), gamma) * y_true weight_b = (1 - alpha) * tf.pow(y_pred, gamma) * (1 - y_true) loss = tf.log1p(tf.exp(-logits)) * (weight_a + weight_b) + logits * weight_b????return?tf.reduce_mean(loss)

總結(jié)

以上是生活随笔為你收集整理的tensorflow分类的loss函数_Tensorflow入门教程(三十三)——图像分割损失函数FocalLoss...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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