-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathanalysis.py
86 lines (63 loc) · 2.63 KB
/
analysis.py
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
from glob import glob
import numpy as np
import argparse
import os
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from libraries.analysis import Analysis
import csv
from libraries.IO import get_IO
def get_basename(path):
return os.path.basename(os.path.normpath(path))
def merge_two_dicts(x, y):
"""Given two dicts, merge them into a new dict as a shallow copy."""
z = x.copy()
z.update(y)
return z
parser = argparse.ArgumentParser(description='')
parser.add_argument('--exp_dir', type=str,
help='experiment directory')
parser.add_argument('--IO', type=str, default='npy',
help='type of experiment results')
args = parser.parse_args()
folders = glob(args.exp_dir+"/*/")
IO = get_IO(args.IO)
analysis_folder = args.exp_dir + '/analysis/'
if not os.path.exists(analysis_folder):
os.makedirs(analysis_folder)
if not os.path.exists(analysis_folder+'pca_plots'):
os.makedirs(analysis_folder + 'pca_plots')
if not os.path.exists(analysis_folder+'marker_plots'):
os.makedirs(analysis_folder + 'marker_plots')
plt.ioff()
folders.sort()
results = []
for folder in folders:
if get_basename(folder) == 'analysis':
continue
print("current exp:", folder)
try:
analysis = Analysis(folder, False, IO)
epochs = [0, 10, 15, 20, 25, 30]
index_scores = np.asarray([analysis.get_index_scores(analysis.get_generated_ratio(i)) for i in epochs])
minIterIndex = np.argmin(np.mean(np.abs(index_scores), axis=1))
print(('Min index', np.mean(np.abs(index_scores[minIterIndex]))))
analysis.plot_pca(epochs[minIterIndex], analysis_folder+'pca_plots/'+get_basename(folder)+'.jpg')
analysis.plot_ratios(epochs[0:minIterIndex+1], analysis_folder+'marker_plots/'+get_basename(folder)+'.jpg')
row = {'exp_id': get_basename(folder), 'best_epoch': epochs[minIterIndex]}
row = merge_two_dicts(row, analysis.get_hyperparams())
row['data_path'] = get_basename(row['data_path'])
for key in ['experiment_path', 'generator_output_activation', 'learning_schedule', 'seed', 'log_transformation']:
row.pop(key, None)
index_scores[minIterIndex] = np.abs(index_scores[minIterIndex])
row['ind_mean'] = np.mean(np.abs(index_scores[minIterIndex]))
results.append(row)
except Exception as err:
print(err)
results= sorted(results, key=lambda k: k['ind_mean'])
keys = results[0].keys()
with open(analysis_folder+'results.csv', 'w') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(results)