def predict(learn: Learner, name: str): # submission.csv preds, _ = learn.get_preds(ds_type=DatasetType.Test) test['has_cactus'] = preds.numpy()[:, 0] test.to_csv('submission_{}.csv'.format(name), index=False) print('Finish creating submission_{}.csv'.format(name)) # loss.csv id_ = range(len(learn.recorder.losses)) loss_df = pd.DataFrame({ 'id': id_, 'loss': np.array(learn.recorder.losses) }) loss_df.to_csv('loss_{}.csv'.format(name), index=False) print('Finish creating loss_{}.csv'.format(name)) # Calculate some metrics on the training set preds, targets = learn.get_preds(ds_type=DatasetType.Train) preds_label = np.argmax(preds.numpy(), axis=1) id_ = range(len(preds)) train_pred_df = pd.DataFrame({ 'id': id_, 'preds': preds.numpy()[:, 0], 'preds_label': preds_label, 'targets': targets.numpy() }) train_pred_df.to_csv('./train_pred_{}.csv'.format(name)) print('Finish creating train_pred_{}.csv'.format(name)) correct_count = np.equal(preds_label, targets.numpy()).sum() len_preds = len(preds) incorrect_count = len_preds - correct_count fpr, tpr = metrics.roc_curve(preds[:, 0], targets) fpr, tpr = fpr.numpy(), tpr.numpy() FP = np.floor(fpr * len_preds) FN = incorrect_count - FP TP = np.floor(tpr * len_preds) TN = correct_count - TP id_ = range(len(fpr)) train_index_df = pd.DataFrame({ 'id': id_, 'fpr': fpr, 'tpr': tpr, 'TP': TP, 'TN': TN, 'FP': FP, 'FN': FN }) train_index_df.to_csv('./train_index_{}.csv'.format(name)) print('Finish creating train_index_{}.csv'.format(name)) # Destroy learn and save the model learn.export('./model_{}.pth'.format(name), destroy=True)
def save_learner(learn: Learner, with_focal_loss=False, with_oversampling=False, sample_size=None, with_weighted_loss=False): postfix = _get_postfix(with_focal_loss, with_oversampling, sample_size, with_weighted_loss) save_file_name = f'{config.PIPELINE_SAVE_FILE}{_version}{postfix}.pkl' save_path = config.TRAINED_MODEL_DIR / save_file_name learn.export(save_path) # fix bug in fastai, missing layer_groups joblib.dump(learn.layer_groups, f'{save_path}_layer_groups')