-
Notifications
You must be signed in to change notification settings - Fork 0
/
hyper_parameter_search.py
87 lines (72 loc) · 3.7 KB
/
hyper_parameter_search.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
"""
Usage:
hyper_parameter_search.py [options]
*_DATA_DIR are directories filled with files that we use as data.
Options:
-h
--model=NAME
--save-dir=NAME Save the models path
--saved-data-dir=NAME Location of already computed data directory.
--log-file=NAME
--log-file-hyperparams=NAME
--tensorboard-logs-path=NAME Path to tensorboard logs
--compute-data
--max-num-epochs INT [default: 200]
--patience INT [default: 10]
"""
import json
import os
from datetime import datetime
import git
from docopt import docopt
import train as train
from evaluate import evaluate
def run_model(args, node_embeddings, action_embeddings, rnn_hidden_dim_1s, rnn_hidden_dim_2s, learning_rates):
for node_embedding in node_embeddings:
for action_embedding in action_embeddings:
for rnn_hidden_dim_1 in rnn_hidden_dim_1s:
for rnn_hidden_dim_2 in rnn_hidden_dim_2s:
for learning_rate in learning_rates:
args_copy = args.copy()
args_copy['--run-name'] = f'rnn_best_model__{args["--model"]}__ne__{node_embedding}__ae{action_embedding}__rnn1{rnn_hidden_dim_1}__rnn2{rnn_hidden_dim_2}__lr{learning_rate}'
args_copy['--hypers-override'] = json.dumps({
'action_embedding_size': action_embedding,
'rnn_hidden_dim_1': rnn_hidden_dim_1,
'learning_rate': learning_rate,
})
train.run(args_copy)
run_name = f"{args_copy['--run-name']}_best_model.bin"
accs = evaluate({
'--model': args['--model'],
'--saved-data-dir': args['--saved-data-dir'],
'--trained-model': os.path.join(args['--save-dir'], run_name),
'--validation-only': True,
'--qualitative': False
})
log_file_hyper_params.write("%15s | %15s | %15s | %15s | %15s | %15s | %15s\n" %
(node_embedding, action_embedding, rnn_hidden_dim_1,
rnn_hidden_dim_2, learning_rate, accs[0].numpy(),
run_name))
if __name__ == "__main__":
print("Started")
args = docopt(__doc__)
with open(os.path.join(args['--log-file-hyperparams'], 'hyper_params.log'), 'a') as log_file_hyper_params:
log_file_hyper_params.write(str(datetime.now()))
log_file_hyper_params.write(f" {args['--model']} ")
log_file_hyper_params.write(git.Repo(search_parent_directories=True).head.object.hexsha)
log_file_hyper_params.write("\n")
log_file_hyper_params.write("%15s | %15s | %15s | %15s | %15s | %15s | %15s\n" %
("node_embedding", "action_embedding", "rnn_hidden_dim_1",
"rnn_hidden_dim_2", "learning_rate", "validation_accuracy", "run_name"))
# Model v1
action_embeddings = [64, 128]
node_embeddings = [16, 64]
rnn_hidden_dim_1s = [64, 128]
rnn_hidden_dim_2s = [64, 128]
learning_rates = [0.005, 0.01]
if args['--model'] == 'v1':
run_model(args, [0], action_embeddings, rnn_hidden_dim_1s, [0], learning_rates)
elif args['--model'] == 'v2':
run_model(args, node_embeddings, action_embeddings, rnn_hidden_dim_1s, [0], learning_rates)
elif args['--model'] == 'v3':
exit(0)