gpt4 book ai didi

tensorflow - TensorFlow SparseCategoricalCrossentropy 如何工作?

转载 作者:行者123 更新时间:2023-11-30 08:52:49 25 4
gpt4 key购买 nike

我试图理解 TensorFlow 中的这个损失函数,但我不明白。它是稀疏分类交叉熵。所有其他损失函数都需要相同形状的输出和标签,但这个特定的损失函数不需要。

源代码:

import tensorflow as tf;

scce = tf.keras.losses.SparseCategoricalCrossentropy();
Loss = scce(
tf.constant([ 1, 1, 1, 2 ], tf.float32),
tf.constant([[1,2],[3,4],[5,6],[7,8]], tf.float32)
);
print("Loss:", Loss.numpy());

错误是:

InvalidArgumentError: Received a label value of 2 which is outside the valid range of [0, 2).  
Label values: 1 1 1 2 [Op:SparseSoftmaxCrossEntropyWithLogits]

如何为损失函数SparseCategoricalCrossentropy提供适当的参数?

最佳答案

SparseCategoricalCrossentropy 和 CategoricalCrossentropy 都计算分类交叉熵。唯一的区别在于目标/标签的编码方式。

使用 SparseCategoricalCrossentropy 时,目标由类别索引(从 0 开始)表示。您的输出形状为 4x2,这意味着您有两个类别。因此,目标应该是一个 4 维向量,其条目为 0 或 1。例如:

scce = tf.keras.losses.SparseCategoricalCrossentropy();
Loss = scce(
tf.constant([ 0, 0, 0, 1 ], tf.float32),
tf.constant([[1,2],[3,4],[5,6],[7,8]], tf.float32))

这与分类交叉熵相反,其中标签应该是单热编码的:

cce = tf.keras.losses.CategoricalCrossentropy();
Loss = cce(
tf.constant([ [1,0] [1,0], [1, 0], [0, 1] ], tf.float32),
tf.constant([[1,2],[3,4],[5,6],[7,8]], tf.float32))

当您有很多类别时,SparseCategoricalCrossentropy 会更有效。

关于tensorflow - TensorFlow SparseCategoricalCrossentropy 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59787897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com