-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathconverter.py
83 lines (63 loc) · 2.51 KB
/
converter.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
import os
import shutil
import numpy as np
import pandas as pd
from collections import defaultdict
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator
def tabulate_events(dpath):
summary_iterators = [EventAccumulator(os.path.join(dpath, dname)).Reload() for dname in os.listdir(dpath)]
tags = summary_iterators[0].Tags()['scalars']
for it in summary_iterators:
assert it.Tags()['scalars'] == tags
out = defaultdict(list)
steps = []
for tag in tags:
steps = [e.step for e in summary_iterators[0].Scalars(tag)]
for events in zip(*[acc.Scalars(tag) for acc in summary_iterators]):
assert len(set(e.step for e in events)) == 1
out[tag].append([e.value for e in events])
max_ = np.min([len(out[tag]) for tag in tags])
for tag in tags:
out[tag] = out[tag][:max_]
return out, steps
def to_csv(dpath):
dirs = os.listdir(dpath)
d, steps = tabulate_events(dpath)
tags, values = zip(*d.items())
np_values = np.array(values)
for index, tag in enumerate(tags):
df = pd.DataFrame(np_values[index], index=steps, columns=dirs)
df.to_csv(get_file_path(dpath, tag))
def get_file_path(dpath, tag):
file_name = tag.replace("/", "_") + '.csv'
folder_path = os.path.join(dpath, 'csv')
if not os.path.exists(folder_path):
os.makedirs(folder_path)
return os.path.join(folder_path, file_name)
def convert_all():
path = "logs"
for model in os.listdir(path):
model_path = path + "/" + model
for dateset in os.listdir(model_path):
dateset_path = model_path + "/" + dateset
for quantizer in os.listdir(dateset_path):
quantizer_path = dateset_path + "/" + quantizer
try:
if os.listdir(quantizer_path):
# print(quantizer_path)
shutil.rmtree(quantizer_path+"/csv", ignore_errors=True)
to_csv(quantizer_path)
except:
print("error {}".format(quantizer_path))
def convert(quantizer_path):
shutil.rmtree(quantizer_path + "/csv", ignore_errors=True)
to_csv(quantizer_path)
# convert("logs/vgg19/cifar10/nnq_d8_k8_n6_u8_b32_log_1")
# convert("logs/resnet101/cifar10/sgd_d32_k8_n6_u8_b32_log_1")
# convert("logs/resnet101/cifar10/qsgd_d0_k8_n1_u8_b32_log_1")
if __name__ == "__main__":
import sys
if (len(sys.argv)) > 1:
convert(sys.argv[1])
else:
convert_all()