Как я могу реализовать предельный убыток?

Я пытаюсь реализовать предельные потери, представленные в статье [1]. Пока это то, что я сделал.

def marginal_loss(model1, model2, y, margin, threshold):
    margin_ = 1/(tf.pow(margin,2)-margin)
    tmp = (1. - y)
    euc_dist = tf.sqrt(tf.reduce_sum(tf.pow(model1-model2, 2), 1, keep_dims=True))
    thres_dist = threshold - euc_dist
    mul_val = tf.multiply(tmp, thres_dist)
    sum_ = tf.reduce_sum(mul_val)
    return tf.multiply(margin_, sum_)

Однако через несколько эпох значение переходит в нан. Я не уверен, какую ошибку я сделал. Кроме того, я использовал 1 вместо эпсилон (описанного в статье), потому что его значение было неясным. Точно так же точное пороговое значение также неизвестно.

Спасибо за любую помощь.

[1] https://ibug.doc.ic.ac.uk/media/uploads/documents/deng_marginal_loss_for_cvpr_2017_paper.pdf


person Kamran Janjua    schedule 17.07.2018    source источник


Ответы (1)


Это очень похоже на проблему, поднятую этим другим вопросом. Проблема может возникнуть из-за использования tf.sqrt, у которого есть плохое свойство, заключающееся в том, что градиенты уходят в бесконечность по мере приближения к нулю, что приводит к нестабильности по мере сходимости вашей модели.

Попытайтесь избавиться от tf.sqrt в своем убытке, например, минимизировав квадрат вашего текущего убытка.

В качестве альтернативы вы можете полагаться на существующие встроенные функции, такие как tf.losses.hinge_loss (не хотя для многомерных выходных данных).

person P-Gn    schedule 17.07.2018
comment
Без tf.sqrt проигрыш в -ве. Основная проблема не в nan, возможно из-за неправильной реализации. Это реализация. Не могли бы вы посмотреть, правильная ли моя реализация или нет? - person Kamran Janjua; 17.07.2018
comment
Эти отрицательные значения, вероятно, связаны с пороговыми значениями; Я не уверен, что такое точное пороговое значение. Я установил его на 1 (вызывает отрицательные значения), когда я меняю его на 0 (это нормально), потери уменьшаются в обоих случаях. Но я не уверен в реализации. - person Kamran Janjua; 17.07.2018