【轉(zhuǎn)載】Tensorflow 分類函數(shù)(交叉熵的計算)

https://www.cnblogs.com/guqiangjs/p/8202899.html


命名空間:tf.nn

函數(shù)作用說明

sigmoid_cross_entropy_with_logits計算 給定 logits 的S函數(shù)?交叉熵。測量每個類別獨立且不相互排斥的離散分類任務(wù)中的概率。(可以執(zhí)行多標(biāo)簽分類,其中圖片可以同時包含大象和狗。)

weighted_cross_entropy_with_logits計算加權(quán)交叉熵。

softmax_cross_entropy_with_logits計算 logits 和 labels 之間的?softmax?交叉熵。測量類別相互排斥的離散分類任務(wù)中的概率(每個條目恰好在一個類別中)。(有一個且只有一個標(biāo)簽:圖像可以是狗或卡車,但不能同時為兩個。)

注意: 每行l(wèi)abels[i]必須是有效的概率分布。如果不是,梯度的計算將是不正確的。

警告此操作期望未縮放的logits,因為它softmax 在logits內(nèi)部執(zhí)行效率。不要用這個輸出來調(diào)用這個op softmax,因為它會產(chǎn)生不正確的結(jié)果。

lables的數(shù)據(jù)必須經(jīng)過One-Hot Encodingtf.one_hot)

sparse_softmax_cross_entropy_with_logits計算 logits 和 labels 之間的?稀疏softmax?交叉熵。測量類別相互排斥的離散分類任務(wù)中的概率(每個條目恰好在一個類別中)。(有一個且只有一個標(biāo)簽:圖像可以是狗或卡車,但不能同時為兩個。)

注意: 對于此操作,給定標(biāo)簽的概率被認(rèn)為是獨占的。也就是說,不允許使用軟類,并且labels向量必須為每個logits(每個minibatch條目)的每一行的真類提供單個特定索引 。對于每個條目的概率分布的軟softmax分類,請參閱?softmax_cross_entropy_with_logits

警告此操作期望未縮放的logits,因為它softmax 在logits內(nèi)部執(zhí)行效率。不要用這個輸出來調(diào)用這個op softmax,因為它會產(chǎn)生不正確的結(jié)果。

softmax計算?softmax?激活。相當(dāng)于?softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), dim)

log_softmax計算 對數(shù)?softmax激活。logsoftmax = logits - log(reduce_sum(exp(logits), dim))

tf.nn.sigmoid_cross_entropy_with_logits

該函數(shù)計算的是 logits 與 lables 的每一個對應(yīng)維度上對應(yīng)元素的損失值。數(shù)值越小,表示損失值越小。

importtensorflowastf_logits = [[0.5,0.7,0.3], [0.8,0.2,0.9]]_one_labels = tf.ones_like(_logits)_zero_labels = tf.zeros_like(_logits)withtf.Session()assess:? ? loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=_logits, labels=_one_labels)# [[0.47407699? 0.40318602? 0.5543552]#? [0.37110069? 0.59813887? 0.34115386]]print(sess.run(loss))? ? loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=_logits, labels=_zero_labels)# [[0.97407699? 1.10318601? 0.85435522]#? [1.17110074? 0.79813886? 1.24115384]]print(sess.run(loss))

weighted_cross_entropy_with_logits

weighted_cross_entropy_with_logits 是 sigmoid_cross_entropy_with_logits 的拓展版,輸入?yún)?shù)和實現(xiàn)和后者差不多,可以多支持一個 pos_weight 參數(shù),目的是可以增加或者減小正樣本在算 Cross Entropy 時的 Loss 。

通常的交叉熵成本定義為:targets * -log(sigmoid(logits)) + (1 - targets) * -log(1 - sigmoid(logits))

這個 pos_weight 被用作積極目標(biāo)的乘數(shù):targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))

tf.nn.softmax_cross_entropy_with_logits

該函數(shù)與 sigmoid_cross_entropy_with_logits 的區(qū)別在于,sigmoid_cross_entropy_with_logits 中的labels 中每一維可以包含多個?1?,而 softmax_cross_entropy_with_logits ,只能包含一個?1

用 mnist 數(shù)據(jù)舉例,如果是目標(biāo)值是3,那么 label 就是[0,0,0,1,0,0,0,0,0,0],除了第4個值為1,其他全為0。(數(shù)據(jù)必須經(jīng)過 One-Hot Encoding 編碼

該函數(shù)把一個維度上的 labels 作為一個整體判斷,結(jié)果給出整個維度的損失值。(而 sigmoid_cross_entropy_with_logits 是每一個元素都有一個損失值)

如果是多目標(biāo)問題,經(jīng)過softmax就不會得到多個和為1的概率,而且label有多個1也無法計算交叉熵,因此這個函數(shù)只適合單目標(biāo)的二分類或者多分類問題。

這個函數(shù)傳入的 logits 是 unscaled 的,既不做 sigmoid 也不做 softmax ,因為函數(shù)實現(xiàn)會在內(nèi)部更高效得使用 softmax 。

importtensorflowastf_logits = [[0.3,0.2,0.2], [0.5,0.7,0.3], [0.1,0.2,0.3]]_labels = [0,1,2]withtf.Session()assess:# Softmax本身的算法很簡單,就是把所有值用e的n次方計算出來,求和后算每個值占的比率,保證總和為1,一般我們可以認(rèn)為Softmax出來的就是confidence也就是概率# [[0.35591307? 0.32204348? 0.32204348]#? [0.32893291? 0.40175956? 0.26930749]#? [0.30060959? 0.33222499? 0.36716539]]print(sess.run(tf.nn.softmax(_logits)))# 對 _logits 進(jìn)行降維處理,返回每一維的合計# [1.? 1.? 0.99999994]print(sess.run(tf.reduce_sum(tf.nn.softmax(_logits),1)))# 傳入的 lables 需要先進(jìn)行 獨熱編碼 處理。loss = tf.nn.softmax_cross_entropy_with_logits(logits=_logits, labels=tf.one_hot(_labels,depth=len(_labels)))# [ 1.03306878? 0.91190147? 1.00194287]print(sess.run(loss))

tf.one_hot

獨熱編碼

importtensorflowastfwithtf.Session()assess:? ? _v = tuple(range(0,5))# [[ 1.? 0.? 0.? 0.? 0.]#? [ 0.? 1.? 0.? 0.? 0.]#? [ 0.? 0.? 1.? 0.? 0.]#? [ 0.? 0.? 0.? 1.? 0.]#? [ 0.? 0.? 0.? 0.? 1.]]print(sess.run(tf.one_hot(_v, len(_v))))

sparse_softmax_cross_entropy_with_logits

sparse_softmax_cross_entropy_with_logits 是 softmax_cross_entropy_with_logits 的易用版本,除了輸入?yún)?shù)不同,作用和算法實現(xiàn)都是一樣的。

區(qū)別是:softmax_cross_entropy_with_logits 要求傳入的 labels 是經(jīng)過 one_hot encoding 的數(shù)據(jù),而 sparse_softmax_cross_entropy_with_logits 不需要。

importtensorflowastf_logits = [[0.3,0.2,0.2], [0.5,0.7,0.3], [0.1,0.2,0.3]]_labels = [0,1,2]withtf.Session()assess:# loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=_logits, labels=_labels)# 結(jié)果與 softmax_cross_entropy_with_logits 相同,區(qū)別就是 labels 傳入?yún)?shù)時不需要做 one_hot encoding。# [ 1.03306878? 0.91190147? 1.00194287]print(sess.run(loss))

softmax

softmax 公式:

Softmax本身的算法很簡單,就是把所有值用e的n次方計算出來,求和后算每個值占的比率,保證總和為1,一般我們可以認(rèn)為Softmax出來的就是confidence也就是概率

該功能執(zhí)行相當(dāng)于?softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), dim)

importtensorflowastfwithtf.Session()assess:? ? _v = tf.Variable(tf.random_normal([1,5], seed=1.0))? ? sess.run(tf.global_variables_initializer())# [[-0.81131822? 1.48459876? 0.06532937 -2.4427042? 0.0992484]]print(sess.run(_v))# [[0.06243069? 0.6201579? 0.15001042? 0.01221508? 0.15518591]]print(sess.run(tf.nn.softmax(_v)))# 1.0print(sess.run(tf.reduce_sum(tf.nn.softmax(_v))))

log_softmax

該功能執(zhí)行相當(dāng)于?logsoftmax = logits - log(reduce_sum(exp(logits), dim))

內(nèi)容來源:

TensorFlow

TensorFlow四種Cross Entropy算法實現(xiàn)和應(yīng)用

數(shù)據(jù)預(yù)處理:獨熱編碼(One-Hot Encoding)

[Tensorflow]1.交叉熵(Cross Entropy)算法實現(xiàn)及應(yīng)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內(nèi)容