2017-10-11 1 views
0

J'essaie de définir un graphique qui forsm un modèle pour CBOW. Voici comment je définis mon graphique mais je continue à obtenir l'erreur suivante: ValueError: Impossible d'alimenter la valeur de forme (50, 2) pour Tensor 'Placeholder_1: 0', qui a la forme '(50, 1)'TensorFlow: Comment corriger ValueError: valeur d'alimentation de forme (50,2) qui a la forme (50,1)

input_data = tf.placeholder(tf.int32, shape=[batch_size, embedding_size]) 
labels = tf.placeholder(tf.int32, shape=[batch_size, 1]) 
dropout_keep_prob = tf.placeholder_with_default(1.0, shape=()) 

nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, batch_size], stddev=1.0/math.sqrt(embedding_size))) 

nce_biases = tf.Variable(tf.zeros([vocabulary_size])) 
embed = tf.nn.embedding_lookup(tf.convert_to_tensor(glove_embeddings_arr), input_data) 

loss = tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights, biases=nce_biases, labels=labels, inputs=tf.reduce_sum(embed, 1), num_sampled=num_sampled, num_classes=vocabulary_size)) 

optimizer = tf.train.GradientDescentOptimizer(learning_rate=1.0).minimize(loss) 

accuracy=0 

return input_data, labels, dropout_keep_prob, optimizer, accuracy, loss 
+1

Cela signifie que vous alimentez un tableau de forme (50,2) dans des 'labels '(alias Placeholder_1: 0) bien que vous l'ayez défini comme un tenseur de forme (50, 1). Cependant, vous n'avez pas fourni la partie de votre code où vous avez alimenté les données dans 'labels' – Pop

+0

donc si je le change en labels = tf.placeholder (tf.int32, shape = [taille_batch, 2]), il obtient cette erreur: tensorflow.python.framework.errors_impl.InvalidArgumentError: Les dimensions doivent être égales, mais sont 100 et 50 pour 'nce_loss/sub' (op: 'Sub') avec mettre des formes: [100,1], [50,1] –

+0

Oui, vous pourriez le faire. En fonction de votre besoin réel – Pop

Répondre

2

Cela signifie que vous nourrissez un tableau de forme (50,2) dans labels (aka. Placeholder_1:0) dans une partie de votre code que vous ne fournissez pas.

Cependant, vous avez défini labels comme étant un tenseur de forme (50,1):

labels = tf.placeholder(tf.int32, shape=[batch_size, 2]) 

Ainsi, que ce soit vous devez redéfinir comme un tenseur de forme (50,2), soit vous besoin de changer la forme des données que vous y mettez. Selon vos besoins ...

+0

donc si je le change en labels = tf.placeholder (tf.int32, shape = [taille_batch, 2]) il obtient cette erreur: tensorflow.python.framework.errors_impl.InvalidArgumentError: Les dimensions doivent être égales, mais sont 100 et 50 pour 'nce_loss/sub' (op: 'Sub') avec mettre des formes: [100,1], [50,1] –

+0

Pas sûr de ce que vous voulez faire ici, mais vous pourriez vouloir pour mettre 'num_true = 2' dans' tf.nn.nce_loss' – Pop