def plot(model_name, dataset, datasize): exp = "6" path_manager = PathManager(model_name, dataset) cpp = defaultdict(list) nlci = defaultdict(list) var_num = 0 for feature_type in AbsExp.get_attribute_method_names(): result_file = path_manager.result_json_path(exp, feature_type, size=datasize) if os.path.isfile(result_file): with open(result_file) as f: results = json.loads(f.readlines()[0]) for value in results.values(): var_num = len(value["CPP"]) cpp[feature_type].append(value["CPP"]) nlci[feature_type].append(value["NLCI"]) pdf_name = path_manager.figure_path(datasize, exp) pp = PdfPages(pdf_name) values = [] names = [] # Filter condition for name, instances in sorted(cpp.items(), key=Plot.sort_key, reverse=True): value = [0] * (var_num + 1) for instance in instances: for idx, v in enumerate(instance): value[idx + 1] += v values.append([i / len(instances) for i in value]) names.append(name) Plot.plot_line(values, names, pp, model_name, "Avg. CPP", "\#Changed Features", [0, 1.1], 0.5, (18, 6), (20, 50)) values = [] names = [] for name, instances in sorted(nlci.items(), key=Plot.sort_key, reverse=True): value = [0] * (var_num + 1) for instance in instances: for idx, v in enumerate(instance): value[idx + 1] += v values.append(value) names.append(name) logger.info("Number of instance {}".format(len(instances))) Plot.plot_line(values, names, pp, model_name, "Avg. NLCI", "\#Changed Features", [0, 1100], 500, (18, 6), (20, 50)) pp.close()
def plot(model_name, dataset, datasize): exp = "7" path_manager = PathManager(model_name, dataset) cs = defaultdict(list) for feature_type in AbsExp.get_attribute_method_names(): result_file = path_manager.result_json_path( exp, feature_type, datasize) if os.path.isfile(result_file): with open(result_file) as f: results = json.loads(f.readlines()[0]) for value in results.values(): cs[feature_type].append(value["Cosine"]) pdf_name = path_manager.figure_path(datasize, exp) pp = PdfPages(pdf_name) values, names = [], [] for i, j in sorted(cs.items(), key=Plot.sort_key, reverse=True): values.append(sorted(j, reverse=True)) names.append(i) Plot.plot_line(values, names, pp, model_name, "CS", "Index of Instance", [-0.05, 1.1], 0.5, (18, 6), (100, 300)) pp.close()
def main(): parser = argparse.ArgumentParser() parser.add_argument("--mdl", help="Model Name", choices=["LMT", "MLP"], required=True) parser.add_argument("--dataset", help="data. E.g. FMNIST", choices=["FMNIST", "MNIST"], required=True) parser.add_argument("--datasize", help="number of test images per class", required=True) parser.add_argument("--explainer", help="name of explainer", choices=AbsExp.get_method_names()) parser.add_argument("--gpu", help="GPU used", choices=["cuda:1", "cuda:0", "cuda:2", "cuda:3"]) parser.add_argument("--task", help="GPU used", choices=["plot", "compute"], required=True) parser.add_argument("--feature", help="Feature type", choices=AbsExp.get_attribute_method_names()) parsedArgs = parser.parse_args(sys.argv[1:]) model_name = parsedArgs.mdl dataset = parsedArgs.dataset datasize = int(parsedArgs.datasize) task = parsedArgs.task if task == "compute": expln_name = parsedArgs.explainer config.DEVICE = parsedArgs.gpu feature_type = parsedArgs.feature exp = Exp6(model_name, dataset, expln_name, datasize, feature_type) exp.run() else: Exp6.plot(model_name, dataset, datasize) logger.info("Finish")