error wasnt actually zero, it was just the graph scale. I put gradients and error on two seperate graphs.  The division in the gradients function is commented out and I have a smalled Alpha to make up for it.  This seems to be the better way to do things.  We are doing rather well after fewer iterations.  Things are in a state that I can keep modifying them.  The next big step would be to add in AdaGrad normalization to get fewer iterations to convergence