I think there is an error in the accuracy calculation, as the equality comparison is done twice.
                    pred_labels = (pred_label == labels).float()

                    batch_accuracy = (pred_labels == labels).sum().item()/input.size(0)

should probably be
                    pred_labels = (pred_label == labels).float()

                    batch_accuracy = pred_labels.sum().item()/input.size(0)

The previous code will compare the labels with the already compared result, so if most of the predictions are correct (the result is 1), you will get a low accuracy value reported as the second comparison will effectively count how many 1s there are in the current batch.