首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解softmax_cross_entropy_with_logits的输出

理解softmax_cross_entropy_with_logits的输出
EN

Stack Overflow用户
提问于 2017-08-03 16:01:02
回答 1查看 1.9K关注 0票数 2

我刚开始接触tensorflow,有人能解释一下我们是怎么得到1.16012561的答案的吗?

代码语言:javascript
复制
 unscaled_logits = tf.constant([[1., -3., 10.]])
   target_dist = tf.constant([[0.1, 0.02, 0.88]])
   softmax_xentropy = 
   tf.nn.softmax_cross_entropy_with_logits(logits=unscaled_logits, 
   labels=target_dist)
   with tf.Session() as sess:
       print(sess.run(softmax_xentropy))

产出: 1.16012561

EN

回答 1

Stack Overflow用户

发布于 2017-08-03 16:18:45

这是一个很好的解释。它是这样工作的。首先,通过softmax函数传递逻辑,给出概率分布:

代码语言:javascript
复制
import numpy as np

logits = np.array([1., -3., 10.])
# Softmax function
softmax = np.exp(logits) / np.sum(np.exp(logits))
print(softmax)
>>> array([  1.23394297e-04,   2.26004539e-06,   9.99874346e-01])
# It is a probability distribution because the values are in [0, 1]
# and add up to 1
np.sum(softmax)
>>> 0.99999999999999989  # Almost, that is

然后,计算计算出的softmax值与目标之间的交叉熵.

代码语言:javascript
复制
target = np.array([0.1, 0.02, 0.88])
# Cross-entropy function
crossentropy = -np.sum(target * np.log(softmax))
print(crossentropy)
>>> 1.1601256622376641

tf.nn.softmax_cross_entropy_with_logits将返回这些值中的一个“每个向量”(默认情况下,“向量”位于最后一个维度),因此,例如,如果输入逻辑和目标大小为10x3,则最终将得到10个交叉熵值。通常,一个求和或平均所有这些,并使用结果作为损失值,以最小化(这是tf.losses.softmax_cross_entropy提供的)。交叉熵表达式背后的逻辑是,当target * np.log(softmax)的负值更接近于零时,target更类似于softmax,当它们不同时,它们会偏离零(向负无穷远)。

注:这是对函数的逻辑解释。在内部,TensorFlow很可能执行不同但等价的操作,以获得更好的性能和数值稳定性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45489314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档