Изменение ClassNLLCriterion в Torch

Я новичок в Torch и хочу создать пользовательскую функцию потерь в Torch, которая является модификацией КлассNLLCriterion. Конкретно, потеря ClassNLLCriterion:

loss(x, class) = -x[class]

Я хочу изменить это так:

loss(x, class) = -x[class] + F(x)

где F(x) — это функция, которая ищет x в таблице (как ключ) и выводит его значение.

Мой вопрос: как правильно реализовать этот пользовательский критерий? Функция updateOutput() кажется простой, но как реализовать функцию updateGradInput()?


person braindead    schedule 18.05.2017    source источник
comment
что за таблица F? Вроде не отличить...   -  person fonfonx    schedule 18.05.2017
comment
@fonfonx Вы правы, F не дифференцируемо. Какова наилучшая стратегия в этом случае? Имеет ли смысл рассматривать F(x) как константу?   -  person braindead    schedule 18.05.2017
comment
Я не знаю, что вы хотите сделать с этим F и насколько сильно различаются его значения. Я думаю, вы могли бы попытаться рассматривать F как константу, но я думаю, что вы каким-то образом теряете полезность этой функции F. Может быть, вы могли бы попытаться найти дифференцируемую функцию, аппроксимирующую F...   -  person fonfonx    schedule 18.05.2017


Ответы (1)


Если F(x) не является дифференцируемым по параметрам сети, то вы не можете использовать его в функции потерь. Дифференцируемость является необходимым условием для выполнения градиентного спуска при обратном распространении. См. Негладкие и недифференцируемые индивидуальные потери функция тензорного потока.

person braindead    schedule 02.06.2017