Besides the values if the parameters, try to check if all .grad attributes of all parameters are filled with some values after the first backward() call.
Before the first call, they should be initialized with None, afterwards they should contain values.
Depending on the training some parameters might get a zero gradient so you wouldn’t see the update in the parameter values directly.