File size: 6,196 Bytes
f291f4a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import os
import json

import numpy as np
import pandas as pd
import matplotlib as mpl
import seaborn as sns


def main():
    datasets = ["mnist", "fmnist", "cifar10"]
    selected_epochs_dict = {"mnist":[[1,2], [10,13], [16,20]],"fmnist":[[1,6],[25,30],[36,50]], "cifar10":[[1,24], [70,100],[160,200]]}
    col = np.array(["dataset", "method", "type", "hue", "period", "eval"])
    df = pd.DataFrame({}, columns=col)

    for i in range(3): # dataset
        dataset = datasets[i]
        data = np.array([])
        selected_epochs = selected_epochs_dict[dataset]
        # load data from evaluation.json
        content_path = "/home/xianglin/projects/DVI_data/resnet18_{}".format(dataset)
        for epoch_id in range(3):
            stage_epochs = selected_epochs[epoch_id]
            inv_acc_train_list = list()
            inv_acc_test_list = list()
            for epoch in stage_epochs:

                eval_path = os.path.join(content_path, "Model", "Epoch_{}".format(epoch), "evaluation_step2_A.json")
                with open(eval_path, "r") as f:
                    eval = json.load(f)
                inv_acc_train = round(eval["inv_acc_train"], 3)
                inv_acc_test = round(eval["inv_acc_test"], 3)
                inv_acc_train_list.append(inv_acc_train)
                inv_acc_test_list.append(inv_acc_test)
            
            inv_acc_train = sum(inv_acc_train_list)/len(inv_acc_train_list)
            inv_acc_test = sum(inv_acc_test_list)/len(inv_acc_test_list)

            if len(data)==0:
                data = np.array([[dataset, "DVI", "Train", "DVI(Train)", "{}".format(str(epoch_id)), inv_acc_train]])
            else:
                data = np.concatenate((data, np.array([[dataset, "DVI", "Train", "DVI(Train)", "{}".format(str(epoch_id)), inv_acc_train]])), axis=0)
            data = np.concatenate((data, np.array([[dataset, "DVI", "Test", "DVI(Test)", "{}".format(str(epoch_id)), inv_acc_test]])), axis=0)
        
        eval_path = "/home/xianglin/projects/DVI_data/resnet18_{}/Model/test_evaluation_tnn.json".format(dataset)
        with open(eval_path, "r") as f:
                eval = json.load(f)
        for epoch_id  in range(3):
            stage_epochs = selected_epochs[epoch_id]
            ppr_train_list = list()
            ppr_test_list = list()
            for epoch in stage_epochs:
                ppr_train = round(eval["ppr_train"][str(epoch)], 3)
                ppr_test = round(eval["ppr_test"][str(epoch)], 3)
                ppr_train_list.append(ppr_train)
                ppr_test_list.append(ppr_test)
            ppr_train = sum(ppr_train_list)/len(ppr_train_list)
            ppr_test = sum(ppr_test_list)/len(ppr_test_list)

            data = np.concatenate((data, np.array([[dataset, "TimeVis", "Train", "TimeVis(Train)",  "{}".format(str(epoch_id)), ppr_train]])), axis=0)
            data = np.concatenate((data, np.array([[dataset, "TimeVis", "Test", "TimeVis(Test)", "{}".format(str(epoch_id)), ppr_test]])), axis=0)
        
        eval_path = "/home/xianglin/projects/DVI_data/resnet18_{}/Model/test_evaluation_hybrid.json".format(dataset)
        with open(eval_path, "r") as f:
                eval = json.load(f)
        for epoch_id  in range(3):
            stage_epochs = selected_epochs[epoch_id]
            ppr_train_list = list()
            ppr_test_list = list()
            for epoch in stage_epochs:
                ppr_train = round(eval["ppr_train"][str(epoch)], 3)
                ppr_test = round(eval["ppr_test"][str(epoch)], 3)
                ppr_train_list.append(ppr_train)
                ppr_test_list.append(ppr_test)
            ppr_train = sum(ppr_train_list)/len(ppr_train_list)
            ppr_test = sum(ppr_test_list)/len(ppr_test_list)

            data = np.concatenate((data, np.array([[dataset, "DeepDebugger", "Train", "DeepDebugger(Train)",  "{}".format(str(epoch_id)), ppr_train]])), axis=0)
            data = np.concatenate((data, np.array([[dataset, "DeepDebugger", "Test", "DeepDebugger(Test)", "{}".format(str(epoch_id)), ppr_test]])), axis=0)

        df_tmp = pd.DataFrame(data, columns=col)
        df = df.append(df_tmp, ignore_index=True)
        df[["period"]] = df[["period"]].astype(int)
        # df[["k"]] = df[["k"]].astype(int)
        df[["eval"]] = df[["eval"]].astype(float)

    df.to_excel("./plot_results/PPR.xlsx")

    pal20c = sns.color_palette('tab20', 20)
    sns.set_theme(style="whitegrid", palette=pal20c)
    hue_dict = {
        "DVI(Train)": pal20c[14],
        "TimeVis(Train)": pal20c[16],
        "DeepDebugger(Train)": pal20c[18],

        "DVI(Test)": pal20c[15],
        "TimeVis(Test)": pal20c[17],
        "DeepDebugger(Test)": pal20c[19],
    }
    sns.palplot([hue_dict[i] for i in hue_dict.keys()])

    axes = {'labelsize': 15,
            'titlesize': 15,}
    mpl.rc('axes', **axes)
    mpl.rcParams['xtick.labelsize'] = 15

    hue_list = ["DVI(Train)", "DVI(Test)", "TimeVis(Train)", "TimeVis(Test)", "DeepDebugger(Train)", "DeepDebugger(Test)"]

    fg = sns.catplot(
        x="period",
        y="eval",
        hue="hue",
        hue_order=hue_list,
        # order = [1, 2, 3, 4, 5],
        # row="method",
        col="dataset",
        ci=0.001,
        height=2.5, #2.65,
        aspect=1.0,#3,
        data=df,
        kind="bar",
        palette=[hue_dict[i] for i in hue_list],
        legend=True
    )
    sns.move_legend(fg, "lower center", bbox_to_anchor=(.43, 0.92), ncol=3, title=None, frameon=False)
    mpl.pyplot.setp(fg._legend.get_texts(), fontsize='15')

    axs = fg.axes[0]
    max_ = df["eval"].max()
    # min_ = df["eval"].min()
    axs[0].set_ylim(0., max_*1.1)
    axs[0].set_title("MNIST(20)")
    axs[1].set_title("FMNIST(50)")
    axs[2].set_title("CIFAR-10(200)")

    (fg.despine(bottom=False, right=False, left=False, top=False)
     .set_xticklabels(['Early', 'Mid','Late'])
     .set_axis_labels("", "")
     )
    # fg.fig.suptitle("Prediction Preserving property")

    fg.savefig(
        "./plot_results/inv_accu.png",
        dpi=300,
        bbox_inches="tight",
        pad_inches=0.0,
        transparent=True,
    )



if __name__ == "__main__":
    main()