Rang incompatibilité: Rang d'étiquettes (2) doit égalité de rang des logits moins 1 (2)
Je suis en train de construire DNN de prédire si l'objet est présent dans l'image ou pas. Mon réseau a deux couches cachées et le dernier calque ressemble à ceci:
# Output layer
W_fc2 = weight_variable([2048, 1])
b_fc2 = bias_variable([1])
y = tf.matmul(h_fc1, W_fc2) + b_fc2
Puis-je avoir de l'espace réservé pour les étiquettes:
y_ = tf.placeholder(tf.float32, [None, 1], 'Output')
J'formation en lots (donc le premier argument dans la couche de Sortie, la forme n'en est pas).
J'utilise la suite de la perte de la fonction:
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
y[:, :1], y_[:, :1], name='xentropy')
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
predict_hand = tf.greater(y, 0.5)
correct_prediction = tf.equal(tf.to_float(predict_hand), y_)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
Mais lors de l'exécution j'ai eu l'erreur suivante:
Rang incompatibilité: Rang d'étiquettes (2) doit égalité de rang des logits
moins 1 (2).
Je suppose que je devrais remodeler les étiquettes couche, mais pas sûr de ce qu'il attend. J'ai regardé dans la documentation et il dit:
logits: Unscaled journal des probabilités de rang r et de la forme [d_0, d_1, ...,
d_{r-2}, num_classes] et dtype float32 ou float64. étiquettes: Tenseur de
la forme [d_0, d_1, ..., d_{r-2}] et dtype int32 ou int64. Chaque entrée dans
les étiquettes doivent être un indice dans [0, num_classes).
Si je viens seule classe, ce que mes étiquettes devrait ressembler (maintenant, c'est juste que 0 ou 1)? Toute aide appréciée
OriginalL'auteur Pavel Podlipensky | 2016-10-31
Vous devez vous connecter pour publier un commentaire.
À partir de la documentation* pour
tf.nn.sparse_softmax_cross_entropy_with_logits
:Donc je suppose que vos étiquettes tenseur doit être de la forme
[None]
. Note qu'un tenseur de la forme de la[None, 1]
ou la forme[None]
contiennent le même nombre d'éléments.Exemple d'entrée avec du béton valeurs factices:
Où il y a 3 exemples dans le mini-lot, le
logits
pour le premier exemple, 11 et 22 et il y a 2 classes: 0 et 1.*https://www.tensorflow.org/versions/r0.11/api_docs/python/nn.html#sparse_softmax_cross_entropy_with_logits
Je suppose que cela signifie que vous êtes à l'alimentation d'une des étiquettes tableau numpy avec la forme (44,1) à l'espace réservé du tenseur de la forme (?,). Donc, essayez d'aplatir les étiquettes tableau numpy avec des étiquettes.aplatir(). C' (44,1) (44,)
OriginalL'auteur Daniel Adiwardana
Le problème est peut-être la fonction d'activation dans votre réseau. L'utilisation de tf.nn.softmax_cross_entropy_with_logits au lieu de sparse_softmax. Cela permettra de résoudre le problème.
OriginalL'auteur Rubens_Zimbres
Pourquoi
Dans de nombreux tutoriels, y compris ici et ici, les étiquettes de taille
[None,10]
et les logits de taille[None,10]
.OriginalL'auteur Nicky Lim
En résumé, voici les instruments de il
sparse_softmax_cross_entropy_with_logits
softmax_cross_entropy_with_logits_v2 et softmax_cross_entropy_with_logits
ici est le même matériel de softmax_cross_entropy_with_logits_v2
OriginalL'auteur Hong Cheng