if args.use_adversary:
                            adv_loss = adv_loss.mean()

                    if args.use_adversary:
                        loss += adv_loss

                    val_loss += loss.item()
                val_loss /= len(val_generator)

        print('Val loss: %s' % val_loss, flush=True)
        es(val_loss, checkpoints)
        if es.early_stop:
            break

    print('Trained for %s epochs' % epoch)
    predictor.load_state_dict(load_checkpoint(PREDICTOR_CHECKPOINT_PATH))
    os.remove(PREDICTOR_CHECKPOINT_PATH)
    if not args.freeze_bert:
        model.load_state_dict(load_checkpoint(MODEL_CHECKPOINT_PATH))
        os.remove(MODEL_CHECKPOINT_PATH)

    if args.gridsearch_classifier:
        auprcs = []  # one value for each in c grid
        prediction_dict, _, _ = evaluate_on_set(
            val_generator, predictor, emb_gen=args.freeze_bert)
        for c_val in c_grid:
            merged_preds_val = merge_preds(prediction_dict, c_val)
            merged_preds_val_list = [
                merged_preds_val[str(i)] for i in actual_val.index]
            auprcs.append(average_precision_score(
                actual_val.values.astype(int), merged_preds_val_list))
parser.add_argument("--num_lstm_layers", type=int, default=2)
parser.add_argument("--dropout_prob", type=float, default=0.1)

if __name__ == '__main__':

    args = parser.parse_args()

    device = torch.device("cpu")
    if torch.cuda.is_available():
        device = torch.device("cuda")

    dl = DataLoader(batch_size=32)
    test_data = dl.setup(return_only_test_data=True)
    test_data = dl.test_dataloader(test_data)

    wts = torch.load(args.weights_path, map_location=torch.device("cpu"))
    model = Classifier(dl.vocab_size, args.embedding_size,
                       args.num_lstm_layers, args.dropout_prob)
    model.load_state_dict(wts)
    model.to(device)

    preds, labels = model.predict(test_data, device)

    cm = confusion_matrix(labels, preds)
    names = [
        "negative", "somewhat negative", "neutral", "somewhat positive",
        "positive"
    ]
    cm = pd.DataFrame(cm, columns=names, index=names)
    print(cm)