예제 #1
0
    __best_threshold = best_th
    f1_best = get_f1_threshold(weighted_valid, valid_ohs, __best_threshold)

    print(__best_threshold)
    print('f1_best=', f1_best)
    f1_best = get_f1_threshold(weighted_valid, valid_ohs,
                               __best_threshold - 0.1)
    print('f1_best(-0.1)=', f1_best)
    f1_best = get_f1_threshold(weighted_valid, valid_ohs,
                               __best_threshold + 0.1)
    print('f1_best(+0.1)=', f1_best)

    f1_best = get_f1_threshold(weighted_valid, valid_ohs,
                               __best_threshold_prev)
    print(__best_threshold_prev)
    print('f1_best(prev)=', f1_best)

    weighted_test = test_merged * best_w
    weighted_test = np.sum(weighted_test, axis=1)
    weighted_test = np.clip(weighted_test, 0.0, 1.0)

    output = 'asset/ensemble_nn2.csv'
    save_pred(ids_test, weighted_test, th=__best_threshold, fname=output)
    output = 'asset/ensemble_nn2_thval.csv'
    save_pred(ids_test, weighted_test, th=__best_threshold_prev, fname=output)

    output = 'asset/ensemble_nn2_th-1.csv'
    save_pred(ids_test, weighted_test, th=__best_threshold - 0.1, fname=output)
    output = 'asset/ensemble_nn2_th+1.csv'
    save_pred(ids_test, weighted_test, th=__best_threshold + 0.1, fname=output)
예제 #2
0
        'nasnet_fold0_lr0.0001_relu_bce',
        'nasnet_fold2_lr0.0001_relu_bce',
    ]
    ensemble_list = model_selection
    ensemble_th = 3

    C.get()['cv_fold'] = 0
    _, _, _, ids_test = get_dataset()

    votes = []
    for _ in range(len(ids_test)):
        vote = [0] * len(name_label_dict)
        votes.append(vote)

    for model_name in ensemble_list:
        if '.csv' in model_name:
            path = 'asset_v3/%s' % model_name
        else:
            path = 'asset_v3/%s.aug.csv' % model_name
        print('load... %s' % path)
        labels = pd.read_csv(path).set_index('Id')
        for idx, s in enumerate(labels['Predicted']):
            if not isinstance(s, str) and math.isnan(s):
                continue
            for pred_idx in [int(i) for i in str(s).split()]:
                votes[idx][pred_idx] += 1

    output = 'asset/ensemble_vote_th%d.csv' % (ensemble_th)
    save_pred(ids_test, votes, th=ensemble_th, fname=output)
    print('done. %s' % output)
    print(__best_threshold)
    print('f1_best(valid)=', f1_best)

    best_th = threshold_search(out, valid_ohs)
    f1_best = get_f1_threshold(out, valid_ohs, best_th)

    print(best_th)
    print('f1_best(valid, th searched)=', f1_best)

    out_list = []
    for batch, logit in zip(grouper(test_merged, bs), grouper(test_logit, bs)):
        batch = [
            b if isinstance(b, torch.Tensor) else torch.from_numpy(b)
            for b in batch if b is not None
        ]
        logit = [
            b if isinstance(b, torch.Tensor) else torch.from_numpy(b)
            for b in logit if b is not None
        ]
        out_batch = net(
            torch.stack(batch, dim=0).cuda(),
            torch.stack(logit, dim=0).cuda())
        out_list.append(out_batch.detach().cpu().numpy())

    out = np.concatenate(out_list, axis=0)

    output = 'asset/ensemble_nn4.csv'
    save_pred(ids_test, out, th=__best_threshold, fname=output)

    print('done-')
                    p, r = valid_result['stats']
                    for class_idx in range(num_class()):
                        writer.add_scalar(
                            'precision_valid/class%d' % class_idx,
                            p[class_idx], curr_epoch)
                        writer.add_scalar('recall_valid/class%d' % class_idx,
                                          r[class_idx], curr_epoch)

                    # run on test set
                    preds_test = run_epoch(model,
                                           d_tests,
                                           title='test',
                                           aug=False)['prediction']
                    save_pred(ids_test,
                              preds_test,
                              th=__best_threshold,
                              fname='asset/%s.csv' % C.get()['name'],
                              valid_pred=valid_result)

                    torch.save(
                        {
                            'epoch': curr_epoch,
                            'model_state_dict': model.state_dict(),
                            'optimizer_state_dict': optimizer.state_dict(),
                        }, 'asset/%s.best.pt' % C.get()['name'])

                torch.save(
                    {
                        'epoch': curr_epoch,
                        'model_state_dict': model.state_dict(),
                        'optimizer_state_dict': optimizer.state_dict(),