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!
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)
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.