result = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
se_ntinel: 这个参数一般情况不使用,直接设置为None就好
logits: 一个没有缩放的对数张量。labels和logits具有相同的数据类型(type)和尺寸(shape)
labels: 每一行 labels[i] 必须是一个有效的概率分布值。
name: 为这个操作取个名字
---------------------
原文:https://blog.youkuaiyun.com/u013555719/article/details/77602899
这个函数的功能就是计算labels和logits之间的交叉熵(cross entropy)。
第一个参数基本不用。此处不说明。
第二个参数label的含义就是一个分类标签,所不同的是,这个label是分类的概率,比如说[0.2,0.3,0.5],labels的每一行必须是一个概率分布(即概率之合加起来为1)。
现在来说明第三个参数logits,logit的值域范围[-inf,+inf](即正负无穷区间)。我们可以把logist理解为原生态的、未经缩放的,可视为一种未归一化的l“概率替代物”,如[4, 1, -2]。它可以是其他分类器(如逻辑回归等、SVM等)的输出。
---------------------
原文:https://blog.youkuaiyun.com/yhily2008/article/details/80262321
交叉熵就是用来判定实际的输出与期望的输出的接近程度。
二、公式
1.softmax回归
假设神经网络的原始输出为y1,y2,….,yn,那么经过Softmax回归处理之后的输出为:
单个节点的输出变成的一个概率值。
2.交叉熵的原理
交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵,则:
除此之外,交叉熵还有另一种表达形式,还是使用上面的假设条件:
函数定义:def softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)
示例:计算batch = 2,num_labels = 3的2*3矩阵
实际输出(概率):
[[0.2,0.1,0.9],
[0.3,0.4,0.6]]
这个函数最后的输出是一个向量,如果我们想计算损失,就需要求平均值。
tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(_sentinel=None,labels=None, logits=None, dim=-1, name=None))
原文:https://blog.youkuaiyun.com/zlrai5895/article/details/80382076
期望输出(概率)label
[[0,0,1],
[1,0,0]]
---------------------
原文:https://blog.youkuaiyun.com/qq_33373858/article/details/82735302