Why is my neural net getting a poor accuracy?
Reason is you did not train the network.

You need to run the step op in your code. You defined it, but didn't use it anywhere later. Running the  loss only calculates the loss, but does not train your network.

after fixing your code (remove duplicate softmax, using adadelta, run step) you should get: