交叉熵計(jì)算

下面幾種交叉熵計(jì)算方法,得到的結(jié)果不盡相同,但是搭模型時(shí)用cross_entropy1的計(jì)算方式,得到的loss值會緩慢下降,其他幾種loss值很大程度上會出現(xiàn)NAN,具體原因我也沒搞明白~

注:cross_entropy1在計(jì)算時(shí),內(nèi)部會做softmax,所以最后輸出全連接層時(shí),不用做softmax

if __name__ == '__main__':

    # 交叉熵?fù)p失函數(shù)test,四種交叉熵?fù)p失計(jì)算方式
    # 第一種交叉熵計(jì)算方式不會出現(xiàn)nan
    sess = tf.InteractiveSession()

    input_label = np.array([[1.0,0.0],[1.0,0.0],[1.0,0.0],[0.0,1.0],[0.0,1.0]])
    y_conv = np.array([[0.2,0.8],[0.9,0.1],[0.5,0.5],[0.3,0.7],[0.6,0.4]])
    print(input_label)
    print(y_conv)

    input = tf.placeholder(tf.float32, [None, 2])
    y1 = tf.placeholder(tf.float32, [None, 2])
    # + (1-input)*tf.log(1-tf.nn.softmax(y1)
    cross_entropy1 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=y1, labels=input_label))
    cross_entropy2 = tf.reduce_mean(-tf.reduce_sum(input*tf.log(tf.nn.softmax(y1)),reduction_indices = [1]) )
    cross_entropy3 = -tf.reduce_mean(input * tf.log(tf.clip_by_value(tf.nn.softmax(y1), 1e-10, 1.0)))
    cross_entropy4 = tf.reduce_mean(-tf.reduce_sum(input*tf.log(tf.clip_by_value(tf.nn.softmax(y1), 1e-10, 1.0)),reduction_indices = [1]    ) )
    cross_entropy5 = -tf.reduce_sum(input * tf.log(tf.nn.softmax(y1)))

    tf.global_variables_initializer().run()
    print("cross_entropy1 = ",sess.run(cross_entropy1,{input:input_label,y1:y_conv}))
    print("cross_entropy2 = ",sess.run(cross_entropy2,{input:input_label,y1:y_conv}))
    print("cross_entropy3 = ",sess.run(cross_entropy3,{input:input_label,y1:y_conv}))
    print("cross_entropy4 = ",sess.run(cross_entropy4,{input:input_label,y1:y_conv}))
    print("cross_entropy5 = ",sess.run(cross_entropy5,{input:input_label,y1:y_conv}))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容