Для любой переменной не предусмотрены градиенты для пользовательской функции потери сегментации - PullRequest
0 голосов
/ 07 декабря 2018

Я создал функцию сегментации.y - это метки mnist, а y_ - это softmax результат прогноза, pen_less и pen_more - два штрафных параметра.

loss = tf.reduce_sum(tf.where(
    tf.greater(tf.to_float(tf.argmax(y, 1)), tf.to_float(tf.argmax(y_, 1))),
    tf.pow(pen_less, tf.to_float(tf.argmax(y, 1)) - tf.to_float(tf.argmax(y_, 1))),
    tf.pow(pen_more, tf.to_float(tf.argmax(y, 1)) - tf.to_float(tf.argmax(y_, 1)))))

1 Ответ

0 голосов
/ 07 декабря 2018

РЕДАКТИРОВАТЬ: поэтому tf.where можно дифференцировать, если вы передадите все три параметра.Я предполагаю, что тогда ваша проблема заключается в argmaxes:

import tensorflow as tf

x = tf.Variable([0, 1, 2])
tf.gradients(tf.argmax(x), x)

Вывод:

LookupError: Градиент для операции 'ArgMax' не определен (тип операции: ArgMax)

Если вы хотите дифференцируемую функцию потерь, вам нужно избегать операций argmax или найти умный способ получить подходящий псевдоградиент.

...