__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)
'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(),