Tensorflow: Tensorflow - ValueError: Cannot feed value of shape

Created on 28 Nov 2016  ·  1Comment  ·  Source: tensorflow/tensorflow

I have 12 input integer features. Output and labels is 1 or 0. I examines MNIST example from tensorflow website.
Here is my code:

import tensorflow as tf
import numpy as np
def init_weights(shape):
    return tf.Variable(tf.random_normal(shape, stddev=0.01))
def model(X, w):
    return tf.matmul(X, w) # notice we use the same model as linear regression, this is because there is a baked in cost function which performs softmax and cross entropy
train_data1  = "./data/xx.csv"
test_data1 = "./data/xxx.csv"
train_label1 = "./data/xxl.csv"
test_label1 = "./data/xx.csv"
train_data = np.genfromtxt(train_data1, delimiter=',')
train_label = np.genfromtxt(train_label1, delimiter=',').astype(int)
test_data = np.genfromtxt(test_data1, delimiter=',')
test_label = np.genfromtxt(test_label1, delimiter=',').astype(int)
# Load datasets.
trX, trY, teX, teY = train_data,train_label, test_data, test_label
X = tf.placeholder("float", [None, 12]) # create symbolic variables
Y = tf.placeholder("float", [None, 2])

w = init_weights([12, 2]) 
py_x = model(X, w)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y)) # compute mean cross entropy (softmax is applied internally)
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost) # construct optimizer
predict_op = tf.argmax(py_x, 1) # at predict time, evaluate the argmax of the logistic regression

# Launch the graph in a session
with tf.Session() as sess:
    # you need to initialize all variables
    tf.initialize_all_variables().run()

    for i in range(100):
         #for (x, y) in zip(train_X, train_Y):
             #sess.run(optimizer, feed_dict={X: trX, Y: trY})
        for start, end in zip(range(0, len(trX), 128), range(128, len(trX)+1, 128)):
            sess.run(train_op, feed_dict={X: trX[start:end], Y: trY[start:end]})
        print(i, np.mean(np.argmax(teY, axis=1) ==
                         sess.run(predict_op, feed_dict={X: teX})))

But I run upper code, I get an error. The compiler says that:

Traceback (most recent call last):
  File "LRexample.py", line 74, in <module>
    sess.run(train_op, feed_dict={X: trX[start:end], Y: trY[start:end]})
ValueError: Cannot feed value of shape (128,) for Tensor u'Placeholder_1:0', which has shape '(?, 2)

How can I handle this error?

community support

Most helpful comment

I solved this problem.
firstly,I transformed load data into :

train_data = np.genfromtxt(train_data1, delimiter=',')
train_label = np.transpose(train_label1, delimiter=',')
test_data = np.genfromtxt(test_data1, delimiter=',')
test_label = np.transpose(test_label1, delimiter=',')

Then,transformed trX, trY, teX, teY data into:

# convert the data
trX, trY, teX, teY = train_data,train_label, test_data, test_label
temp = trY.shape
trY = trY.reshape(temp[0], 1)
trY = np.concatenate((1-trY, trY), axis=1)
temp = teY.shape
teY = teY.reshape(temp[0], 1)
teY = np.concatenate((1-teY, teY), axis=1)

Finally,I transformed launching the graph in a session into:

with tf.Session() as sess:
    # you need to initialize all variables
    tf.initialize_all_variables().run()

    for i in range(100):
            sess.run(train_op, feed_dict={X:  trX, Y: trY})        
            print(i, np.mean(np.argmax(teY, axis=1) == sess.run(predict_op, feed_dict={X: teX})))

That's all.

>All comments

I solved this problem.
firstly,I transformed load data into :

train_data = np.genfromtxt(train_data1, delimiter=',')
train_label = np.transpose(train_label1, delimiter=',')
test_data = np.genfromtxt(test_data1, delimiter=',')
test_label = np.transpose(test_label1, delimiter=',')

Then,transformed trX, trY, teX, teY data into:

# convert the data
trX, trY, teX, teY = train_data,train_label, test_data, test_label
temp = trY.shape
trY = trY.reshape(temp[0], 1)
trY = np.concatenate((1-trY, trY), axis=1)
temp = teY.shape
teY = teY.reshape(temp[0], 1)
teY = np.concatenate((1-teY, teY), axis=1)

Finally,I transformed launching the graph in a session into:

with tf.Session() as sess:
    # you need to initialize all variables
    tf.initialize_all_variables().run()

    for i in range(100):
            sess.run(train_op, feed_dict={X:  trX, Y: trY})        
            print(i, np.mean(np.argmax(teY, axis=1) == sess.run(predict_op, feed_dict={X: teX})))

That's all.

Was this page helpful?
0 / 5 - 0 ratings