Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
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")