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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With