2017-06-28 1 views
3

Le courant tf.contrib.metrics.streaming_accuracy est seulement capable de calculer la précision du top 1, et non le top k. Pour contourner le problème, ce que je l'ai utilisé:TensorFlow: Existe-t-il une métrique permettant de calculer et de mettre à jour la précision du top k?

tf.reduce_mean(tf.cast(tf.nn.in_top_k(predictions=predictions, targets=labels, k=5), tf.float32)) 

Cependant, cela ne me donne pas une façon de calculer les exactitudes de diffusion en continu en moyenne sur chaque lot, ce qui serait utile pour obtenir une précision d'évaluation stable. Je suis actuellement en train de calculer manuellement cette précision de top 5 en streaming en utilisant sa sortie numpy, mais cela signifie que je ne serai pas capable de visualiser cette métrique sur tensorboard.

Existe-t-il un moyen d'avoir une implémentation plus simple en créant une fonction accuracy_update, ou existe-t-il une fonction existante qui le fait déjà?

Merci.

Répondre

4

Vous pouvez remplacer votre utilisation de tf.contrib.metrics.streaming_accuracy par le niveau inférieur tf.metrics.mean, qui est finalement utilisé par streaming_accuracy - vous trouverez une similitude dans leurs documentations respectives.

E.g. (non testé)

tf.metrics.mean(tf.nn.in_top_k(predictions=predictions, targets=labels, k=5)) 
+0

Merci pour votre conseils! La fonction fonctionne exactement comme prévu. – kwotsin

+0

Quels types de données et quelles formes sont vos prédictions et vos étiquettes? J'essaie d'utiliser cette fonction aussi mais j'obtiens un InvalidArgumentError disant que les cibles [0] sont hors limites – GPhilo

+0

Nevermind, a trouvé le problème (j'utilisais l'argmax (logits) comme 'prédictions' au lieu des logits eux-mêmes) – GPhilo