-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathview.py
executable file
·124 lines (113 loc) · 5.11 KB
/
view.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
118
119
120
121
122
123
124
#!/usr/bin/env python3
"""
A command-line parameters viewer. Select a bot and a parameters set and see
what's inside it:
./view.py linear 0
A training record is appended to the history kept with parameters after each
session, though only the latest parameter values are stored in a single file.
Trace lists keys of past sets, ask the viewer about them to see past entries.
Reproducing training sessions using the stored pseudo-random generator seeds is
limited to the same machine, the same NumPy version (the same random sequences
from C's rand() and NumPy's rvs()), and the same toolkit version.
"""
from collections import OrderedDict as odict
from datetime import datetime
from textwrap import indent
from core import available_bots
from iop import load_params, params_desc, parse_args, seeds_desc, training_desc
description = "Display a parameters set and its history."
arguments = (
(('bot',), {
'choices': available_bots.keys(),
'help': "the bot for which to lookup parameters"
}),
(('params',), {
'help': "the parameters to display, loaded from " +
"params/<bot>_<params>.npz"
}),
(('-v', '--verbosity',), {
'type': int,
'default': 1,
'help': "how much info to print; 0 disables printing of the history"
}),
(('-p', '--precision'), {
'type': int,
'default': None,
'help': "how many decimal digits of floats to print"
})
)
if __name__ == '__main__':
args = parse_args(description, arguments)
_, params, history = load_params(args.bot, args.params, args.verbosity)
params_desc = indent(params_desc(params, args.precision), " ")
if history:
history_desc = ""
trace = []
for record in history:
if isinstance(record, (list, tuple)):
history_desc += "\nCombined from multiple.\n"
continue
# Some backwards compatibility notches.
if record['bot'] == 'linear_1':
record['bot'] = 'linear'
elif record['bot'] == 'linear_2':
record['bot'] = 'states_1'
elif record['bot'] == 'quadratic_1':
record['bot'] = 'quadratic'
if (record['trainer'] == 'local_dec' or
record['trainer'] == 'anneal' and
record['date'] < datetime(2016, 5, 28, 10)):
record['trainer'] = 'local_d'
if record['trainer'] == 'anneal_dec':
record['trainer'] = 'anneal'
if 'config' not in record:
record['config'] = "not saved"
if 'real' not in record['dists']:
record['dists']['real'] = record['dists'].pop('float')
if 'unit' not in record['dists']:
record['dists']['unit'] = record['dists'].pop('float01')
if 'new' not in record['dists']:
record['dists']['new'] = {}
if 'vary' not in record['dists']:
record['dists']['vary'] = {}
if 'emphases' not in record:
record['emphases'] = ()
if 'phases' not in record:
record['phases'] = (1.,)
named_seeds = record['seeds'][0]
for index, seed in enumerate(named_seeds):
if seed.isdigit():
named_seeds[index] = "{}_{}".format(record['bot'], seed)
elif seed.startswith('linear_1'):
named_seeds[index] = "linear{}".format(seed[8:])
if 'param_map' not in record:
record['param_map'] = record.get('params_map', {})
for key, new_keys in record['param_map'].items():
if isinstance(new_keys, str):
record['param_map'][key] = [new_keys]
if 'param_freeze' not in record:
record['param_freeze'] = record.get('params_freeze', ())
if 'param_scale' not in record:
record['param_scale'] = {}
if isinstance(record['level'], str):
record['level'] = {'key': record['level'], 'steps': -1,
'actions': -1, 'features': -1}
if 'scores' not in record:
score = record.pop('best_score', float('-inf'))
record['scores'] = odict(train=score)
elif isinstance(record['scores'], tuple):
record['scores'] = odict(train=record['scores'][0])
if 'prngs_seed' not in record:
record['prngs_seed'] = record.get('rand_seed', '---')
record_desc = training_desc(record, args.verbosity, args.precision)
history_desc += "\n{}\n".format("\n".join(record_desc))
trace.append(seeds_desc(record['seeds'], 0))
else:
history_desc = "\nThese parameters were saved without history.\n"
trace.append("{}_{}".format(args.bot, args.params))
if args.verbosity == 0:
print(" ".join(trace[1:]))
else:
print("\nParams:\n\n{}".format(params_desc) +
"\nHistory:\n{}".format(indent(history_desc, " ")) +
"\nTrace:\n\n{}\n".format(indent(" - ".join(trace[1:]), " ")))