假设我有类似的logits
[[4.3, -0.5, -2.7, 0, 0], [0.5, 2.3, 0, 0, 0]]
显然,第一个例子中的最后两个和第二个例子中的最后三个被掩盖,不应该影响损失和梯度计算 . 如何计算此logits和相应标签之间的交叉熵损失?为了理智,这个例子的标签可以是这样的
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0]]
(一个问题:在logits上的Softmax,然后是log,也适用于被屏蔽的零,并且tf的交叉熵方法也将考虑这些元素的损失 . )
(另外,你可以考虑这样的问题:我在批处理中有不同长度的logits,即我的logits分别为eg.1和eg.2的长度为3和2 . 后面跟着标签 . )
3 回答
我最终做的是以下内容:
结果是:
[[9.9094123e-01 8.1551941e-03 9.0362143e-04 0 0]
[1.4185105e-01 8.5814887e-01 0 0 0]]
信用额度:here
掩盖交叉熵损失是图书馆所涵盖的常见操作 . 它实际上处理了更一般的权重概念;提供用于屏蔽的二进制权重 .
不要通过实际计算输出的softmax然后交叉熵来计算softmax交叉熵,你会失去同时执行它的计算精度和稳定性 .
你可以做: