2017-09-27 5 views
0

Voici mon code:tf.nn.sparse_softmax_cross_entropy_with_logits - erreur de type

import tensorflow as tf 
    with tf.Session() as sess: 
     y = tf.constant([0,0,1]) 
     x = tf.constant([0,1,0]) 
     r = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=x) 
     sess.run() 
     print(r.eval()) 

Il génère l'erreur suivante:

ValueError        Traceback (most recent call last) 
<ipython-input-10-28a8854a9457> in <module>() 
     4  y = tf.constant([0,0,1]) 
     5  x = tf.constant([0,1,0]) 
----> 6  r = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=x) 
     7  sess.run() 
     8  print(r.eval()) 

~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\nn_ops.py in sparse_softmax_cross_entropy_with_logits(_sentinel, labels, logits, name) 
    1687  raise ValueError("Rank mismatch: Rank of labels (received %s) should " 
    1688      "equal rank of logits minus 1 (received %s)." % 
-> 1689      (labels_static_shape.ndims, logits.get_shape().ndims)) 
    1690  # Check if no reshapes are required. 
    1691  if logits.get_shape().ndims == 2: 

ValueError: Rank mismatch: Rank of labels (received 1) should equal rank of logits minus 1 (received 1). 

Quelqu'un pourrait-il me aider à comprendre cette erreur? C'est assez simple comment calculer softmax et calculer l'entropie croisée manuellement.

En outre, comment pourrais-je utiliser cette fonction, j'ai besoin d'alimenter en lots (2 matrice dim)?

MISE À JOUR

J'ai aussi essayé:

import tensorflow as tf 

with tf.Session() as sess: 
    y = tf.constant([1]) 
    x = tf.constant([0,1,0]) 
    r = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=x) 
    sess.run() 
    print(r.eval()) 

et généré la même erreur

+1

Vous ne savez pas, mais avez-vous essayé avec des tenseurs de rang 2? Softmax est généralement utilisé dans les problèmes multi-classe. –

Répondre

1

fixe pour vous. x doit être un vecteur 2d

with tf.Session() as sess: 
    y = tf.constant([1]) 
    x = tf.expand_dims(tf.constant([0.0, 1.0, 0.0]), 0) 
    r = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=x) 
    print(r.eval())