parse_softmax_cross_entropy_with_logits和softmax_cross_entropy_with_logits的区别

对于softmax_cross_entropy_with_logits,其logits和labels大小都是[batch_size, num_classes],logits和labels的dtype 都为float16、float32或者float64。

对于parse_softmax_cross_entropy_with_logits,其logits大小是[batch_size, num_classes],labels大小是[batch_size],每一个labels的范围是[0,num_classes-1],logits的dtype为float32或者float64,labels的dtype 为int32或者int64。

示例程序如下:

import tensorflow as tf


logits = tf.constant([[3,1,0],[1,8,12],[4,6,7],[5,8,2]],dtype=tf.float32)
labels1 = tf.constant([[1,0,0],[0,0,1],[0,1,0],[0,1,0]],dtype=tf.float32)
labels2 = tf.constant([0,2,1,1],dtype=tf.int32)


res1 = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels1)
res2 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels2)


with tf.Session() as sess:
    a = sess.run(res1)
    b = sess.run(res2)
    print(a)
    print(b)

    print(a==b)

其中的一个输出结果:

[0.16984604 0.01816635 1.3490123 0.05094571]
[0.16984604 0.01816635 1.3490123 0.05094571]

[ True True True True]

执行结果分析如下:

两个函数都先对logits作如下处理:

tf.nn.softmax(logits)),默认对logits的最后一维进行处理,即列,等价于tf.nn.softmax(logits,1)),e^3/( e^3 +e^1 + e^0)

结果为:[[8.4379470e-01 1.1419519e-01 4.2010065e-02]
[1.6401031e-05 1.7985916e-02 9.8199767e-01]
[3.5119023e-02 2.5949645e-01 7.0538449e-01]

[4.7314156e-02 9.5033026e-01 2.3556333e-03]]

0.16984604=ln(8.4379470e-01) 其他的同理。

若tf.nn.softmax(logits,0))默认对第一维即行进行处理,e^3 /(e^3+ e^1 +e^4 + e^5)

结果为:

[[8.8946812e-02 4.2686163e-04 6.1027772e-06]
[1.2037642e-02 4.6811062e-01 9.9325621e-01]
[2.4178252e-01 6.3351884e-02 6.6925078e-03]

[6.5723300e-01 4.6811062e-01 4.5093762e-05]]

对于softmax_cross_entropy_with_logits函数,接下来就是交叉熵,得到的tensor大小为[batch_size]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值