2016-09-18 3 views
0

TensorFlow est super et nous l'avons utilisé pour la classification d'image ou système de recommandation. Nous avons utilisé softmax et cross entropy comme fonction de perte. Cela fonctionne si nous n'avons qu'un seul type d'étiquette. Par exemple, nous choisissons seulement un chiffre de 0 à 9 dans le jeu de données MNIST.Comment softmax deux types d'étiquettes dans TensorFlow

Maintenant, nous avons les caractéristiques de genre et d'âge. Nous avons un codage à chaud unique pour chaque exemple, comme [1, 0, 1, 0, 0, 0, 0]. Les deux premiers labels représentent le genre et les cinq derniers labels représentent l'âge. Chaque exemple a deux 1 et les autres devraient être des 0.

Maintenant, notre code ressemble à ceci.

logits = inference(batch_features) 
softmax = tf.nn.softmax(logits) 

Mais je trouve qu'il « Softmax » toutes les étiquettes et la somme à 2. Mais ce que je pense est les deux premiers somme jusqu'à 1 et les cinq dernières somme jusqu'à 1. Je ne sais pas comment mettre en œuvre cela dans TensorFlow parce que ces 7 (2 + 5) caractéristiques semblent identiques.

Répondre

1

Vous avez vos logits de genre et d'âge concaténés ensemble.

Vous voulez les prévisions marginales.

Vous devez diviser vos logits (tf.slice) en deux matrices et les amadouer séparément. N'oubliez pas que cela ne vous donne que les probabilités marginales. Il ne peut pas représenter «un vieil homme ou une jeune femme», car cela ne se factorise pas. Par conséquent, vous souhaiterez peut-être effectuer des prédictions conjointes à la place. 5x2 classes au lieu de 5+2 classes. Évidemment, ce modèle plus puissant est plus enclin à la surpopulation.

Si vous avez beaucoup de classes dans chaque catégorie, vous pouvez construire un modèle intermédiaire avec une factorisation de rang inférieur de la matrice conjointe, en additionnant plusieurs prédictions marginales. Cela donne Nxr+Mxr entrées au lieu de N+M ou NxM.