pytorch: NLLLoss ignore_index default value



在pytorch NLLLoss文档中,默认的ignore_index是-100而不是通常的None,有什么特别的原因吗?似乎任何负值都是等价的。

顺便说一句,我想忽略索引的原因可能是什么?谢谢!

ignore_index的值必须是int,这就是为什么默认值是int而不是None。默认值是任意的,它可以是任何负数,即。任何非"valid"类标签。该函数将忽略目标实例具有该类标签的所有元素。在实践中,此选项可用于识别未标记的像素,例如在密集预测任务中。


Edit:追溯nn.NLLLoss的实现,我们可以在torch/onnx/symbolic_opset12.pynll_loss实现中找到这条注释:

# in onnx NegativeLogLikelihoodLoss specification, ignore_index is optional without default value.
# therefore we need to set ignore_index attribute even if it is not specified (e.g. ignore_index=-100).
ignore_index = sym_help._maybe_get_const(ignore_index, "i")

我觉得他们应该使用None作为默认值。Python不是静态类型的,所以ignore_index没有必要是int(甚至像c++这样的静态类型语言现在也有选项类型),如果没有,他们可以使用-1,这更不和谐。

那么他们为什么不使用-1呢?

一种可能是作者担心-1会被误解为"最后一个"。我发现-100继承自《Torch》的Lua版本。虽然在Lua中,-1通常不表示&;last&;,但Lua Torch的Tensor类使用了这个约定。

最新更新