Make sure  you’ve checked the gradients. If they are zero (or very close to it), that means you hit the local minimum. You may use this function:
def pprint_step(model, lr: float = 0.01):
    all_parameters = dict((k, str(v.detach().numpy()) + ("<no grad>" if v.grad is None else (
        "↑" if all(v.grad > 0) else ("↓" if all(v.grad < 0) else "")) + ", Δ: " + str(v.grad.numpy() * lr))) for k, v in
                          model.named_parameters())
    pp = pprint.PrettyPrinter()
    s = pp.pformat(all_parameters)
    print(s)
    return s