Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TensorFlow InvalidArgumentError: Matrix size-compatible: In[0]: [100,784], In[1]: [500,10]

I'm new to tensorflow and am following a tutorial. I am getting an error that says:

InvalidArgumentError (see above for traceback): Matrix size-compatible: In[0]: [100,784], In[1]: [500,10]
     [[Node: MatMul_3 = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_Placeholder_0, Variable_6/read)]]

Here is my code:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500

n_classes = 10
batch_size = 100

x = tf.placeholder('float') #this second parameter makes sure that the image fed in is 28*28
y = tf.placeholder('float')

def neural_network_model(data):
    hidden_1_layer = {'weights':tf.Variable(tf.random_normal([784, n_nodes_hl1])), 'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}
    hidden_2_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}
    hidden_3_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 'biases':tf.Variable(tf.random_normal([n_nodes_hl3]))}
    output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl3, n_classes])), 'biases':tf.Variable(tf.random_normal([n_classes]))}

    # input_data * weights + biases
    l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases'])
    # activation function
    l1 = tf.nn.relu(l1)

    l2 = tf.add(tf.matmul(data, hidden_2_layer['weights']), hidden_2_layer['biases'])
    l2 = tf.nn.relu(l2)

    l3 = tf.add(tf.matmul(data, hidden_3_layer['weights']), hidden_3_layer['biases'])
    l3 = tf.nn.relu(l3)

    output = tf.matmul(data, output_layer['weights']) + output_layer['biases']
    return output

def train_neural_network(x):
    prediction = neural_network_model(x)
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y))
    #learning rate = 0.001
    optimizer = tf.train.AdamOptimizer().minimize(cost)
    hm_epochs = 10
    with tf.Session() as sess:
        sess.run(tf.initialize_all_variables())
        for epoch in range(hm_epochs):
            epoch_loss = 0
            for _ in range(int(mnist.train.num_examples/batch_size)):
                epoch_x, epoch_y = mnist.train.next_batch(batch_size)
                _, c = sess.run([optimizer, cost], feed_dict={x:epoch_x,y:epoch_y})//THIS IS THE LINE WHERE THE ERROR 0CCURS
                epoch_loss += c
            print 'Epoch ' + epoch + ' completed out of ' + hm_epoch + ' loss: ' + epoch_loss
        correct = tf.equal(tf.argmax(prediction,1), tf.argmax(y,1))
        accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
        print 'Accuracy: ' + accuracy.eval({x:mnist.test.images, y:mnist.test.labels})

train_neural_network(x)

I have marked the line where the error occurs what am I doing wrong and how can I fix it?

Stack overflow wants me to write more, it says that there is not enough details and too much code. I honestly don't understand tensorflow well enough to add any more details. I'm hoping someone can just help me with this. I think the problem is that optimizer and cost have different dimensions, but I don't understand why or what I should do about it.

like image 511
Matt Avatar asked Dec 28 '16 06:12

Matt


1 Answers

One error lies in this line

 l2 = tf.add(tf.matmul(data, hidden_2_layer['weights']), hidden_2_layer['biases'])

Your second weights variable has dimensions 500 x 500, but your data variable was fed with data 100x784 so multiplication is incompatible. Make this,

 l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])

Also make the corresponding change for l3 and output.


Always specify a shape for the placeholder, like this,

x = tf.placeholder(tf.float32, shape=(None, 784))

This will allow you to catch such errors while building the graph and TensorFlow will be able to pinpoint these errors.

like image 131
martianwars Avatar answered Oct 11 '22 14:10

martianwars