2017-10-11 87 views
0

我试图定义一个图形,用于放弃CBOW的模型。下面是我如何定义我的图形,但我继续得到以下错误:ValueError:无法为张量'Placeholder_1:0'提供形状(50,2)的值,形状为'(50,1)'TensorFlow:如何修复ValueError:形状(50,2)的形状(50,1)的饲料值(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

这意味着你正在馈送一个形状数组(50,2)在'标签'(aka。Placeholder_1:0)中,尽管你已经将它定义为一个具有形状的张量(50, 1)。然而,如果我将它更改为labels = tf.placeholder(tf.int32,shape = [batch_size,2]),则会得到此错误:您没有提供代码的一部分,因为您正在将数据提供给'labels' – Pop

+0

。 tensorflow.python.framework.errors_impl.InvalidArgumentError:尺寸必须相同,但对于'nce_loss/sub'(op:'Sub'),其值为100和50, 放置形状:[100,1],[50,1] –

+0

是的,你可以这样做。根据您的实际需要 – Pop

回答

2

这意味着你喂养在代码的一部分您没有提供形状(50,2)的labels阵列(又名。Placeholder_1:0)。

然而,您已定义labels为与形状的张量(50,1):

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

因此,或者需要重新定义它作为形状的张量(50,2),任你需要改变你放入的数据的形状。根据你的需要...

+0

所以如果我将其更改为labels = tf.placeholder(tf.int32,shape = [batch_size,2]),它会得到此错误:tensorflow.python.framework.errors_impl.InvalidArgumentError:尺寸必须相等,但是对于'nce_loss/sub'(op:'Sub')为100和50,在 中放置形状:[100,1],[50,1] –

+0

不确定你想在这里做什么,但你可能想要在'tf.nn.nce_loss'中设置'num_true = 2' – Pop

相关问题