python - 带有 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 函数如何从两个不同维度的张量开始计算损失值?
解决方案
交叉熵是一种比较两个概率分布的方法。也就是说,它说明了两者的不同或相似程度。它是在两个数组或连续分布上定义的数学函数,如此处所示。
'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], ...]
.
如果您想深入了解详细信息,可以查看源代码。
推荐阅读
- python - git diff custom hunk header 没有显示正确的功能
- json - 如何索引 Pandas 读入的 JSON 文件以按类别获取平均值?
- function - 如何在 R 中获得 GAM 结果的显式函数?
- docker - Docker compose 容器在 pgAdmin4 中不可见
- c# - Xunit 测试用例无限运行
- reactjs - 如何在显示布局中列出来自另一个资源的项目
- python-3.x - 将 Jupyter 主目录从 c:/ 更改为 d:/
- c# - UWP 控制台/GUI 混合应用程序
- javascript - 如何在 THREE.js 中获取“剪辑空间”UV?
- python - S3存储桶如何列出当前文件夹中的对象