Tensorflow: tf.argmax не должен разрешать обратное распространение через него

Созданный на 30 апр. 2016  ·  1Комментарий  ·  Источник: tensorflow/tensorflow

Привет, Тензорфлоу!

В последнее время я использую функцию argmax, но всегда помещал tf.stop_gradient перед ее использованием. Однако, когда я удаляю stop_gradient, тензорный поток по-прежнему работает нормально.

Может быть, я что-то неправильно понимаю, но argmax не является дифференцируемой функцией. Как backprop все еще работает, когда вы его удаляете? Разве не должна выдаваться ошибка, когда вы передаете argmax без stop_gradient?

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

Самый полезный комментарий

Градиент определен почти везде, поэтому его можно определить на практике. Однако это не очень полезно, поэтому оно не зарегистрировано для этой операции в TensorFlow.

x = tf.Variable([1., 1])
z = tf.argmax(x, 0)
sess = create_session()
xgrad = tf.gradients(z, x)
sess.run(tf.initialize_all_variables())
sess.run(xgrad)

LookupError: No gradient defined for operation 'ArgMax' (op type: ArgMax)

>Все замечания

Градиент определен почти везде, поэтому его можно определить на практике. Однако это не очень полезно, поэтому оно не зарегистрировано для этой операции в TensorFlow.

x = tf.Variable([1., 1])
z = tf.argmax(x, 0)
sess = create_session()
xgrad = tf.gradients(z, x)
sess.run(tf.initialize_all_variables())
sess.run(xgrad)

LookupError: No gradient defined for operation 'ArgMax' (op type: ArgMax)
Была ли эта страница полезной?
0 / 5 - 0 рейтинги