So while your training and validation accuracies are good, the test accuracy is pretty low?
Also, probably unrelated to this issue, but if you are using nn.CrossEntropyLoss, you should pass the raw logits to the criterion, not the the probabilities using F.softmax. Just remove the softmax and try to train your model again.