Your loss is fine, so im still not sure what is the question here, are you asking how you check the accuracy?
loss = criterion(outputs, target)
Is correct,  CrossEntropyLoss applies LogSoftmax on your logits and then uses NLLoss.
your output tensor looks like Logits, and you have 3 classes, and both samples in outputs marked class 2 as the chosen class, by a large margin from the other classes.
Your target says class 2 for the 1st sample and class 2 for the second sample,
so in that case, loss=0.0 (which is perfectly fine in this example)
so when you say:

So learning is not going on.

It seems strange, cause it looks like learning was done, and it was very good (maybe even overfitting ).
Just in case your question was how to check the accuracy of the model, then you probably want to use
CategoricalAccuracyWithLogits, lpd 1 package has this metric and some more, so you may choose to use that if you want structured train process and metrics,
For the sake of simplicity, you can use this snippet:
def categorical_accuracy_with_logits(y_pred, y_true):
    indices = torch.max(y_pred, 1)[1]
    correct = torch.eq(indices, y_true).view(-1)
    accuracy = correct.float().sum() / correct.shape[0]
    return accuracy

Roy