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