title: Shapes must be equal rank, but are 2 and 1
body: <p>I'm following the example of Sentdex on youtube and here is the code I have</p>
  
  <pre><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', [None, 784])
  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])),}
  
  
      l1 = tf.add(tf.matmul(data,hidden_1_layer['weights']), hidden_1_layer['biases'])
      l1 = tf.nn.relu(l1)
  
      l2 = tf.add(tf.matmul(l1,hidden_2_layer['weights']), hidden_2_layer['biases'])
      l2 = tf.nn.relu(l2)
  
      l3 = tf.add(tf.matmul(l2,hidden_3_layer['weights']), hidden_3_layer['biases'])
      l3 = tf.nn.relu(l3)
  
      output = tf.matmul(l3,output_layer['weights']) + output_layer['biases']
  
      return output
  
  def train_neural_network(x):
      prediction = neural_network_model(x)
      # OLD VERSION:
      #cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(prediction,y) )
      # NEW:
      cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y) )
      optimizer = tf.train.AdamOptimizer().minimize(cost)
  
      hm_epochs = 10
      with tf.Session() as sess:
          # OLD:
          #sess.run(tf.initialize_all_variables())
          # NEW:
          sess.run(tf.global_variables_initializer())
  
          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})
                  epoch_loss += c
  
              print('Epoch', epoch, 'completed out of',hm_epochs,'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)
  </code></pre>
  
  <p>It raises this error :</p>
  
  <pre><code>ValueError: Shapes must be equal rank, but are 2 and 1
  From merging shape 0 with other shapes. for 'SparseSoftmaxCrossEntropyWithLogits/packed' (op: 'Pack') with input shapes: [?,10], [10].
  </code></pre>
  
  <p>on this line:</p>
  
  <pre><code>cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y) )
  </code></pre>
  
  <p>I think it is about the size of y that induced the error, I tried using </p>
  
  <pre><code>cost = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
          prediction, tf.squeeze(y)))
  </code></pre>
  
  <p>I'm pretty sure this means that the cost function induces the error (shown above) prediction and y are not the same shape, but I don't understand TensorFlow well enough to know how to fix it. I don't even really understand where y is being set, I got most of this code from a tutorial and fiddled with it to apply it to a different dataset. How can I fix this error?</p>
  
  <p>ps I tried to print out prediction, it gives me two outputs and i guess thats where the error comes from:</p>
  
  <pre><code>prediction
  (&lt;tf.Tensor 'MatMul_39:0' shape=(?, 10) dtype=float32&gt;,
   &lt;tf.Variable 'Variable_79:0' shape=(10,) dtype=float32_ref&gt;)
  </code></pre>