nn.CrossEntropyLoss expects raw logits as the model output, so remove the softmax and relu and pass the output of the last linear layer to the loss function.
Also, as explained before, you are not zeroing out the gradients.