I mean,  Try to detect buggy implementations with train on a smaller subset of the dataset. If result reaches %100 accuracy then everything works fine with respect to forward and backward pass.
Reproducing results are somewhat different. You need to  tune model hyperparameters. My advice is to start with learning rate