Could you check the shapes of the output and target you are passing to nn.MSELoss?
We recently had some issues regarding unwanted broadcasting, which worked fine, but calculated a wrong loss value.
E.g. if your output is [10, 1], while your target is [10], the intermediate value will be broadcasted to [10, 10] which is probably not what you expect.