softmax交叉熵

softmax应用

实例描述

下面的代码中,假设有一个标签labels和一个网络输出值logits。

这个例子以这两个值来计算一下3次试验。

(1) 两次softmax试验:将输出的logits分别进行1次和2次softmax,观察两次的区别及意义。

(2) 观察交叉熵:将步骤(1)中的两个值分别进行softmax_cross_entropy_with_logits,观察它们的区别。

(3)自建公式试验:将做两次softmax的值放到自建组合公式里得到正确的值。

import tensorflow as tf

labels = [[0,0,1],[0,1,0]]
logits = [[2, 0.4, 6],[0.2, 0, 3]]

logits_scaled = tf.nn.softmax(logits)
logits_scaled2 = tf.nn.softmax(logits_scaled)


result1 = tf.nn.softmax_cross_entropy_with_logits(labels = labels, logits = logits)
result2 = tf.nn.softmax_cross_entropy_with_logits(labels = labels, logits = logits_scaled)
result3 = -tf.reduce_sum(labels*tf.log(logits_scaled),1)

with tf.Session() as sess:
    print("scaled = ", sess.run(logits_scaled))
    print("sacled2 = ", sess.run(logits_scaled2))

    print("rel1 = ",sess.run(result1),"\n")
    print("rel2 = ",sess.run(result2),"\n")
    print("rel3 = ",sess.run(result3))

运行以上代码,得到一下结果:

vscaled =  [[0.01792113 0.00361821 0.9784606 ]
 [0.05475439 0.0448291  0.9004165 ]]
sacled2 =  [[0.21744308 0.21435514 0.5682018 ]
 [0.2315006  0.22921424 0.5392852 ]]
rel1 =  [0.02177474 3.1048977 ] 

rel2 =  [0.5652787 1.4730982] 

rel3 =  [0.02177475 3.104898  ]

Process finished with exit code 0

比较scaled和scaled2可以看到:经过第二次softmax后,分布概率会有变化,而scaled才是我们真实的sofamax值。

比较erl1和rel2可以看到:传入的softmax_cross_entropy_with_logits的logits是不需要进行softmax的,如果将softmax后的值scaled传入softmax_cross_entropy_with_logits就相当于进行了两次softmax转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值