TensorFlow:我的 logits 格式是否适合交叉熵函数?
TensorFlow: Are my logits in the right format for cross entropy function?
好的,所以我准备 运行 Tensorflow 中的 tf.nn.softmax_cross_entropy_with_logits()
函数。
据我了解,'logits' 应该是概率张量,每个张量都对应于某个像素的概率,该像素是图像的一部分,最终将成为 "dog" 或 "truck" 或其他...有限数量的东西。
这些 logits 将被插入到这个交叉熵方程中:
据我了解,logits 代入等式右侧。也就是说,它们是每个 x(图像)的 q。如果它们是从 0 到 1 的概率……那对我来说就有意义了。但是当我 运行ning 我的代码并以对数张量结束时,我没有得到概率。相反,我得到的是正数和负数的浮点数:
-0.07264724 -0.15262917 0.06612295 ..., -0.03235611 0.08587133 0.01897052 0.04655019 -0.20552202 0.08725972 ..., -0.02107313 -0.00567073 0.03241089 0.06872301 -0.20756687 0.01094618 ..., etc
所以我的问题是...是这样吗?我是否必须以某种方式计算我所有的 logits 并将它们转换为 0 到 1 的概率?
要注意的关键是 tf.nn.softmax_cross_entropy_with_logits(logits, labels)
在 logits
的每一行上执行内部 softmax,以便它们 在 之前可解释为概率馈入交叉熵方程。
因此,“logits
”不需要是概率(或者甚至是真正的对数概率,顾名思义),因为在该操作中发生了内部规范化。
另一种写法:
xent = tf.nn.softmax_cross_entropy_with_logits(logits, labels)
...将是:
softmax = tf.nn.softmax(logits)
xent = -tf.reduce_sum(labels * tf.log(softmax), 1)
但是,这种替代方案 (i) 数值稳定性较差(因为 softmax 可能会计算更大的值)和 (ii) 效率较低(因为反向传播中会发生一些冗余计算)。对于实际使用,我们建议您使用 tf.nn.softmax_cross_entropy_with_logits()
.
好的,所以我准备 运行 Tensorflow 中的 tf.nn.softmax_cross_entropy_with_logits()
函数。
据我了解,'logits' 应该是概率张量,每个张量都对应于某个像素的概率,该像素是图像的一部分,最终将成为 "dog" 或 "truck" 或其他...有限数量的东西。
这些 logits 将被插入到这个交叉熵方程中:
据我了解,logits 代入等式右侧。也就是说,它们是每个 x(图像)的 q。如果它们是从 0 到 1 的概率……那对我来说就有意义了。但是当我 运行ning 我的代码并以对数张量结束时,我没有得到概率。相反,我得到的是正数和负数的浮点数:
-0.07264724 -0.15262917 0.06612295 ..., -0.03235611 0.08587133 0.01897052 0.04655019 -0.20552202 0.08725972 ..., -0.02107313 -0.00567073 0.03241089 0.06872301 -0.20756687 0.01094618 ..., etc
所以我的问题是...是这样吗?我是否必须以某种方式计算我所有的 logits 并将它们转换为 0 到 1 的概率?
要注意的关键是 tf.nn.softmax_cross_entropy_with_logits(logits, labels)
在 logits
的每一行上执行内部 softmax,以便它们 在 之前可解释为概率馈入交叉熵方程。
因此,“logits
”不需要是概率(或者甚至是真正的对数概率,顾名思义),因为在该操作中发生了内部规范化。
另一种写法:
xent = tf.nn.softmax_cross_entropy_with_logits(logits, labels)
...将是:
softmax = tf.nn.softmax(logits)
xent = -tf.reduce_sum(labels * tf.log(softmax), 1)
但是,这种替代方案 (i) 数值稳定性较差(因为 softmax 可能会计算更大的值)和 (ii) 效率较低(因为反向传播中会发生一些冗余计算)。对于实际使用,我们建议您使用 tf.nn.softmax_cross_entropy_with_logits()
.