tensorflow之损失函数:sparse_softmax_cross_entropy_with_logits 与 softmax_cross_entropy_with_logits的区别

本文对比了TensorFlow中两种交叉熵损失函数:sparse_softmax_cross_entropy_with_logits与softmax_cross_entropy_with_logits的区别。前者直接接收数字标签,后者则需要one-hot形式的标签。文章通过示例代码展示了两种函数的应用,并强调了求和与求平均步骤的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原函数: 

tf.nn.sparse_softmax_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    name=None
)

tf.nn.softmax_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    dim=-1,
    name=None
)

 

1.sparse_softmax_cross_entropy_with_logits中 lables接受直接的数字标签 
如[1], [2], [3], [4] (类型只能为int32,int64) 

labels=tf.constant([0,1,2,3],dtype=tf.int32)
logits=tf.Variable(tf.random_normal([4,4]))
loss=tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels,logits=logits)
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
print(sess.run(loss))


2.而softmax_cross_entropy_with_logits中 labels接受one-hot标签 
如[1,0,0,0], [0,1,0,0],[0,0,1,0], [0,0,0,1] (类型为int32, int64)

相当于sparse_softmax_cross_entropy_with_logits 对标签多做一个one-hot动作

labels=tf.constant([[1,0,0,0], [0,1,0,0],[0,0,1,0], [0,0,0,1] ],dtype=tf.int32)
logits=tf.Variable(tf.random_normal([4,4]))
loss=tf.nn.softmax_cross_entropy_with_logits(labels=labels,logits=logits)
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
print(sess.run(loss))

注意!!!上面两个函数的返回值并不是一个数,而是一个向量,如果要求交叉熵,我们要再做一步tf.reduce_sum操作,就是对向量里面所有元素求和,如果求loss,则要做一步tf.reduce_mean操作,对向量求均值!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值