Tensorflow: tf.argmax não deve permitir o Backprop através dele

Criado em 30 abr. 2016  ·  1Comentário  ·  Fonte: tensorflow/tensorflow

Olá Tensorflow,

Ultimamente, tenho usado a função argmax, mas sempre coloquei um tf.stop_gradient antes de usá-la. No entanto, quando removo o stop_gradient, o tensorflow ainda funciona bem.

Talvez eu esteja entendendo algo errado, mas argmax não é uma função diferenciável. Como o backprop ainda está funcionando quando você o remove? Um erro não deveria ser lançado quando você passa argmax sem qualquer stop_gradient?

Se for possível diferenciar argmax, eu agradeceria muito qualquer recurso mostrando como isso é feito. Obrigado TF!

Comentários muito úteis

O gradiente é definido em quase todos os lugares, portanto, pode ser definido na prática. Porém, não é muito útil, então não está registrado para esta operação no 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)

>Todos os comentários

O gradiente é definido em quase todos os lugares, portanto, pode ser definido na prática. Porém, não é muito útil, então não está registrado para esta operação no 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)
Esta página foi útil?
0 / 5 - 0 avaliações