Your loss is going down so the model is learning. It could possibly be that you are not computing the predictions correctly. Delete the softmax and argmax for the predictions and instead just do this
 pred = output.data.max(1, keepdim=True)[1]

and then to determine the number of correct you can just do this
correct += np.sum(np.squeeze(pred.eq(labels.data.view_as(pred))).cpu().numpy())