#python #pytorch #torch
Вопрос:
в документе pytorch NLLLoss значение по умолчанию ignore_index равно -100 вместо обычного None
, есть ли какие-либо особые причины? похоже, что любое отрицательное значение эквивалентно.
Кстати, в чем может быть причина, по которой я хотел бы игнорировать индекс? Спасибо!
Ответ №1:
Значение для ignore_index
должно быть int, поэтому значение по умолчанию-int, а не None
. Значение по умолчанию произвольное, это могло быть любое отрицательное число, т. Е. Все, что не является «допустимой» меткой класса. Функция будет игнорировать все элементы, для которых целевой экземпляр имеет эту метку класса. На практике этот параметр можно использовать для идентификации немаркированных пикселей, например, в задачах плотного прогнозирования.
Редактировать: Прослеживая реализацию nn.NLLLoss
, мы можем найти этот комментарий в nll_loss
реализации torch/onnx/symbolic_opset12.py
:
# 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")
Комментарии:
1. Другим распространенным примером является заполнение в пакетах тензоров разного размера; это очень распространенное явление для текстовых вводов (например, очень немногие фрагменты текста имеют одинаковую длину).
Ответ №2:
Я чувствую, что они должны были использоваться None
по умолчанию. Python не является статически типизированным, поэтому нет необходимости в ignore_index
int (И даже статически типизированные языки, такие как C , в наши дни имеют типы опций). В противном случае они могли бы использовать -1
, что менее неприятно.
Так почему же они -1
, по крайней мере, не использовали?
Одна из возможностей заключается в том, что авторы боялись, что -1
это будет неправильно истолковано как «последнее». Я смог обнаружить, что -100
он был унаследован от Lua-версии Torch. Хотя в Lua -1
это обычно не означает «последний», Tensor
класс Lua Torch использовал это соглашение.