首页 > 解决方案 > 带有 Keras 的 TensorFlow:sparse_categorical_crossentropy

问题描述

我是 StackOverflow 的新手,最近也开始使用 Tensorflow 和 Keras。目前我正在开发一个使用 LSTM 单元的架构。我的问题在这里被部分讨论:

keras.losses.sparse_categorical_crossentropy 的实现是什么样的?

但是,在我的模型中,我有一个大小为 (batch_size, seq_length, words_dimension) 的预测张量y_hat和大小为 (batch_size, seq_length) 的真实标签y

我想知道当我调用 loss = sparse_categorical_crossentropy(y,y_hat)时损失的值是如何计算的:sparse_crossentropy 函数如何从两个不同维度的张量开始计算损失值?

标签: pythontensorflowkeras

解决方案


交叉熵是一种比较两个概率分布的方法。也就是说,它说明了两者的不同或相似程度。它是在两个数组或连续分布上定义的数学函数,如此处所示

'sparse_categorical_crossentropy' 中的 'sparse' 部分表示 y_true 值每行必须有一个值,例如[0, 2, ...],表示哪个结果(类别)是正确的选择。然后模型输出y_pred必须是这样的[[.99, .01, 0], [.01, .5, .49], ...]。在这里,模型预测第 0 个类别在第一行中有 0.99 的机会。这非常接近真实值,即[1,0,0]。然后sparse_categorical_crossentropy将使用上述公式计算具有两个分布的单个数字并返回该数字。

如果您使用 'categorical_crossentropy' 它会期望y_true是一个单热编码向量,例如[[0,0,1], [0,1,0], ...].

如果您想深入了解详细信息,可以查看源代码


推荐阅读