forked from tensorflow/models
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevents.py
executable file
·117 lines (88 loc) · 2.75 KB
/
events.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
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
#!/usr/bin/env python3
import os
import sys
import glob
import tensorflow as tf
from tensorflow.python.util import deprecation
deprecation._PRINT_DEPRECATION_WARNINGS = False
def select_tags(idx, event, tags=[]):
if event.step == 0:
return
value_map = dict()
cnt = 0
for value in event.summary.value:
if value.tag in tags:
value_map[value.tag] = value.simple_value
cnt += 1
if cnt != len(tags):
return
values = [value_map[t] for t in tags]
columns = [
# idx,
# event.step,
event.wall_time,
]
for v in values:
columns.append(v)
return columns
def get_all_tags(filename):
tags = dict()
for event in tf.train.summary_iterator(filename):
for value in event.summary.value:
tags[value.tag] = True
return tags.keys()
def save_columns(prefix, name, *columns):
filename = os.path.join(prefix, name)
with open(filename, 'w') as f:
rows = zip(*columns)
for row in rows:
f.write(' '.join(str(x) for x in row) + '\n')
def select_events(filename, select_tags, tags, t0):
rows = []
for idx, event in enumerate(tf.train.summary_iterator(filename)):
row = select_tags(idx, event, tags)
if row:
rows.append(row)
wall_time_idx = 0
for row in rows:
row[wall_time_idx] -= t0
return rows
def find_events(folder):
pattern = os.path.join(folder, 'events.out.tfevents.*')
return [f for f in glob.glob(pattern)]
def process_folder(ckpt_dir):
filenames = find_events(ckpt_dir)
# print(filenames)
filename = os.path.join(ckpt_dir, filenames[0])
_, _, _, t0, host = os.path.basename(filename).split('.')
# print(get_all_tags(filename))
return host, int(t0), filename
def main(ckpt_dir, job_name=None):
train_tags = [
'loss',
'train_accuracy_1',
]
eval_tags = [
'loss',
'accuracy',
]
output_dir = 'data'
host, t0, filename = process_folder(ckpt_dir)
rows = select_events(filename, select_tags, train_tags, t0)
ts, loss, acc = zip(*rows)
if job_name is None:
job_name = str(t0)
prefix = os.path.join(output_dir, host, job_name)
os.makedirs(prefix, exist_ok=True)
save_columns(prefix, 'train-loss.txt', ts, loss)
save_columns(prefix, 'train-acc.txt', ts, acc)
_, _, filename = process_folder(os.path.join(ckpt_dir, 'eval'))
rows = select_events(filename, select_tags, eval_tags, t0)
ts, loss, acc = zip(*rows)
save_columns(prefix, 'eval-loss.txt', ts, loss)
save_columns(prefix, 'eval-acc.txt', ts, acc)
print('%s/%s' % (host, job_name))
job_name = None
if len(sys.argv) > 2:
job_name = sys.argv[2]
main(sys.argv[1], job_name)