softmax_cross_entropy softmax交叉熵 tensorflow numpy

计算softmax交叉熵损失的几个方法

import numpy as np
import tensorflow as tf
#numpy version
labels = np.array([[0, 0, 1],
                   [0, 1, 0],
                   [1, 0, 0],
                   [1, 0, 0],
                   [0, 1, 0]], dtype=np.float32)
#logits是np.dot(X,W)的结果
logits = np.array([[1, 2, 7],
                   [3, 5, 2],
                   [6, 1, 3],
                   [8, 2, 0],
                   [3, 6, 1]], dtype=np.float32)

#softmax不改变输入数据的维度
def softmax(logits):
    return np.exp(logits)/(np.sum(np.exp(logits),1).reshape(-1,1))

losslist=-np.sum(np.multiply(labels,np.log(softmax(logits))),1)
total_loss=np.average(losslist)

print(losslist)
print(total_loss)


#tensorflow version1
losslist_tf1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
total_loss_tf1 = tf.reduce_mean(losslist_tf1)
with tf.Session()as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run([losslist_tf1,total_loss_tf1]))


#tensorflow version2
losslist_tf2=-tf.reduce_sum(tf.multiply(labels,tf.log(tf.nn.softmax(logits=logits))),1)
total_loss_tf2=tf.reduce_mean(losslist_tf2)
with tf.Session()as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run([losslist_tf2,total_loss_tf2]))


#tensorflow version3
numlabels=tf.argmax(labels,1)
losslist_tf3 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=numlabels, logits=logits)
total_loss_tf3 = tf.reduce_mean(losslist_tf1)
with tf.Session()as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run([losslist_tf3,total_loss_tf3]))
 
四个版本最后输出都是
[array([ 0.00917445,  0.16984604,  0.05498521,  0.00281022,  0.05498521], dtype=float32), 0.05836023]
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值