I cannot detect any obvious mistakes in your code. I tried it with various learning rates and an even larger number of iterations, but I also don’t get the wanted weights.
Have you tried other optimizers?