2017-09-26 5 views
0

J'essaie de comprendre comment fonctionne tf.nn.sparse_softmax_cross_entropy_with_logits.tf.nn.sparse_softmax_cross_entropy_with_logits - étiquettes sans codage à chaud dans tensorflow

description dit:

A common use case is to have logits of shape [batch_size, num_classes] 
and labels of shape [batch_size]. But higher dimensions are supported. 

Il suggère donc que nous pouvons nourrir des étiquettes sous forme brute, par exemple [1,2,3].

Maintenant, puisque tous les calculs sont effectués par lot je crois que ce qui suit est possible:

Dans tous les cas, nous supposons la taille du lot égal à deux.

Cas 1 (avec un lot): logit:

0.4 0.2 0.4 
0.3 0.3 0.4 

étiquettes correspoding:

2 
3 

Je devine que les étiquettes pourraient être codifiés comme

[1 0 0] 
[0 1 0] 

Cas n ° 2 (avec un autre lot): logit:

0.4 0.2 0.4 
0.3 0.3 0.4 

étiquettes correspoding:

1 
2 

Je devine que les étiquettes peuvent être codées (je ne vois pas ce qui nous empêche de ce codage, à moins que tensorflow garde trace comment codé avant)

[1 0 0] 
[0 1 0] 

Nous avons donc deux codages différents. Est-il sûr de supposer que le flux tensoriel garde le codage cohérent d'un lot à l'autre?

Répondre

2

Il n'y a pas de codage réel. Les étiquettes ne sont que la position du 1 dans le vecteur selon un chaud:

0 -> [1, 0, 0] 
1 -> [0, 1, 0] 
2 -> [0, 0, 1] 

Ce « codage » sera utilisé dans chaque lot.

+0

Merci beaucoup! donc mes étiquettes doivent être d'un certain format? Que faire si mes étiquettes sont 34, 45, 133 et que nous avons seulement trois classes – user1700890

+1

@ user1700890 Oui, vos étiquettes doivent être des entiers entre 0 et number_of_classes - 1. Si vos étiquettes sont 34, 45 et 133, vous devrez les coder comme 0 , 1 et 2 vous-même. – BlueSun