itaymr:

If it does the loss internally is there no point computing the loss?


No, nn.CrossEntropyLoss uses F.log_softmax and F.nll_loss internally and thus calculates the loss in:
criterion = nn.CrossEntropyLoss()
...
loss = criterion(output, target)

However, it expects logits (unbound values) instead of probabilities (outputs of softmax) since the log probabilities will be calculated internally via F.log_softmax.



 itaymr:

I’m fairly certain I’m doing something wrong, as I’m not getting accurate results, and my softmax values are negative?


These are not softmax outputs (probabilities), but logits and are expected to have postive as well as negative values.
You are also using a very high learning rate, so I would probably lower it and use the same as you are using in TF/Keras.