def run_transfer(options, train_dataset, validate_dataset): config = options["config"] base_model = models.load_model(options["base_model_path"]) tl_model = create_tl_model(base_model, config) model = SOMClassifier(config, tl_model) train = model.create_sequence(train_dataset, config.train_batch_size) if validate_dataset is not None: validate = model.create_sequence(validate_dataset, config.valid_batch_size) else: validate = None model.train_generator(train, validate, epochs=config.train_epochs, class_weight=None) output = utils.URLPath(options["output_path"]) if validate: pred_arr, pred_labels = model.predict_generator(validate) true_labels = validate.true_labels pred_df = pd.DataFrame(pred_arr, columns=validate.binarizer.classes_, index=validate.dataset.labels) io_functions.save_csv(pred_df, output / "preds.csv") io_functions.save_json({"true": list(true_labels), "pred": list(pred_labels)}, output / "preds_labels.json") generate_all_metrics(true_labels, pred_labels, config.mapping, output) model.save(output) model.save_information(output) keras.backend.clear_session() del model
def generate_confusion(true_labels, pred_labels, groups, output): """Calculate confusion matrix metrics and also create plots.""" confusion = metrics.confusion_matrix(true_labels, pred_labels, labels=groups) confusion = pd.DataFrame(confusion, index=groups, columns=groups) print(confusion) io_functions.save_csv(confusion, output / "validation_confusion.csv") plot_confusion.plot_confusion_matrix( confusion, normalize=False).savefig(str(output / "confusion_abs.png"), dpi=300) plot_confusion.plot_confusion_matrix( confusion, normalize=True).savefig(str(output / "confusion_norm.png"), dpi=300) return confusion
def run_denovo(options, train_dataset, validate_dataset): config = options["config"] model = train_som_classifier(train_dataset, validate_dataset, config) output = utils.URLPath(options["output_path"]) if validate_dataset: validate = model.create_sequence(validate_dataset, config.valid_batch_size) pred_arr, pred_labels = model.predict_generator(validate) true_labels = validate.true_labels pred_df = pd.DataFrame(pred_arr, columns=validate.binarizer.classes_, index=validate.dataset.labels) io_functions.save_csv(pred_df, output / "preds.csv") io_functions.save_json({"true": list(true_labels), "pred": list(pred_labels)}, output / "preds_labels.json") generate_all_metrics(true_labels, pred_labels, config.mapping, output) model.save(output) model.save_information(output) keras.backend.clear_session() del model
io_functions.save_som(somsample.data, sompath, save_config=False) somsample.data = None somsample.path = sompath casesamples[case.id].append(somsample) somcases = [] for case in dataset: somcases.append(case.copy(samples=casesamples[case.id])) somcollection = case_dataset.CaseCollection(somcases) io_functions.save_json(somcollection, output + ".json") labels = [{"label": case.id, "randnum": 0, "group": case.group} for case in dataset] # Save metadata into an additional csv file with the same name metadata = pd.DataFrame(labels) io_functions.save_csv(metadata, output + ".csv") io_functions.save_json( { tube: { "dims": m.model.dims, "channels": m.model.markers, } for tube, m in model.models.items() }, output + "_config.json") def main(args): """Load a model with given transforming arguments and transform individual cases.""" cases = io_functions.load_case_collection(args.data, args.meta) # cases = cases.sample(1, groups=["CLL", "normal"]) selected_markers = cases.selected_markers