tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别
生活随笔
收集整理的這篇文章主要介紹了
tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這兩個函數(shù)的用法類似
sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None)唯一的區(qū)別是sparse的labels是int類型,而非sparse的labels是one-hot類型。
具體代碼用法
import tensorflow as tf#代碼段1,手動算出代價函數(shù) # our NN's output logits = tf.constant([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]) # step1:do softmax y = tf.nn.softmax(logits) # true label # 注意這里標簽必須是浮點數(shù),不然在后面計算tf.multiply時就會因為類型不匹配tf_log的float32數(shù)據(jù)類型而出錯 y_ = tf.constant([[0, 0, 1.0], [0, 0, 1.0], [0, 0, 1.0]]) # 這個是稀疏的標簽 # step2:do log tf_log = tf.log(y) # step3:do mult pixel_wise_mult = tf.multiply(y_, tf_log) # step4:do cross_entropy cross_entropy = -tf.reduce_sum(pixel_wise_mult)#代碼段2,使用tf.nn.softmax_cross_entropy_with_logits算出代價函數(shù) cross_entropy2=tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_))#dont forget tf.reduce_sum()!! #代碼段3,使用tf.nn.sparse_softmax_cross_entropy_with_logits()算出代價函數(shù) # 將標簽稠密化 dense_y = tf.arg_max(y_, 1) cross_entropy3 = tf.reduce_sum(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=dense_y, logits=logits))#代碼段4,驗證結果 with tf.Session() as sess:result1,result2,result3 = sess.run((cross_entropy,cross_entropy2,cross_entropy3))print("method1 : %s" % result1)print("method2 : %s" % result2)print("method3 : %s" % result3)#輸出結果'''method1 : 1.222818method2 : 1.2228179method3 : 1.2228179'''參考
https://www.jianshu.com/p/648d791b55b0
https://blog.csdn.net/m0_37041325/article/details/77043598
記錄時間
2018/9/11 21:28總結
以上是生活随笔為你收集整理的tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tf.train.exponential
- 下一篇: what does tf.no_op d