Tensorflow 解释分类熵的一个实现

Tensorflow 解释分类熵的一个实现,tensorflow,keras,Tensorflow,Keras,分类交叉熵的公式如下所示 最后一层的输出应该是什么?是否应该是来自softmax层的类的概率 目标是什么 下面的代码如何实现1/N,求和和和pi,j 最后一层的输出应该是什么?是否应该是来自softmax层的类的概率 它可以是softmax层的输出或原始(输入到softmax层)。softmax层的输出向量是每个类的概率。如果output是softmax的输出,则从\u logits=False设置。如果output是logits,那么您需要从\u logits=True设置。您可以在内部看到

分类交叉熵的公式如下所示

最后一层的输出应该是什么?是否应该是来自softmax层的类的概率

目标是什么

下面的代码如何实现1/N,求和和和pi,j

最后一层的输出应该是什么?是否应该是来自softmax层的类的概率

它可以是softmax层的输出或原始(输入到softmax层)。softmax层的输出向量是每个类的概率。如果
output
是softmax的输出,则从\u logits=False设置
。如果
output
是logits,那么您需要从\u logits=True设置
。您可以在内部看到它被调用,它同时计算softmax概率和交叉熵函数。将它们计算在一起可以获得数值稳定性的一些数学技巧

目标是什么

目标是一个单热向量。这意味着数字
n
由向量
v
表示,其中
v[n]=1
0
。这里
n
是标签的类别。调用了一个函数来获取TensoFlow中的编码。例如
tf.one\u hot([3],5)
将导致向量
[0,0,1,0,0]

下面的代码如何实现1/N,求和和和pi,j

上述代码并不是所有输入的平均值(不需要“1/N”)。例如,如果输入是定型的
[10,5]
,则输出将是定型的
[10]
。您必须调用
tf.reduce\u mean
查看结果。因此,方程式基本上是:

上述方程式在该行中实现

return - tf.reduce_sum(target * tf.log(output),
                       reduction_indices=len(output.get_shape()) - 1)
“∑”是
tf.reduce\u sum
。“pi,j”是
输出
,指示器功能(即粗体1)是热编码的
目标

旁注 您应该使用,因为您提供的代码(从_logits=False设置
时)可能会导致数字错误。组合函数处理所有这些数值问题

return - tf.reduce_sum(target * tf.log(output),
                       reduction_indices=len(output.get_shape()) - 1)