-
Notifications
You must be signed in to change notification settings - Fork 0
/
Configure.py
118 lines (103 loc) · 6.28 KB
/
Configure.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
default_configs = {
# NOTE: Hyper Parameters (ideally) in order of most used:
'epochs': {'default': 1,
'flags': ['--epochs', '-E'],
'argparse':{'type':int}},
'learning_rate': {'default': 0.001,
'flags': ['--learning_rate', '-L'],
'argparse':{'type':float}},
'batch_size': {'default': 128,
'flags': ['--batch_size', '-B'],
'argparse':{'type':int}},
'weight_decay': {'default': 0.0002,
'flags': ['--weight_decay', '-W'],
'argparse':{'type':float}},
'save_interval': {'default': None,
'flags': ['--save_int', '-S'],
'argparse':{'type':int,'help':'Save Interval in epochs. A value of 0 saves at completion only. All valid interval values save on completion in model.th in specified directory.'}},
'step_schedule': {'default': False,
'flags': ['--step_schedule', '-s'],
'argparse':{'action':'store_true','help':'Learning rate decay.'}},
'cosine': {'default': False,
'flags': ['--cosine'],
'argparse':{'action':'store_true','help':'CosineAnnealing Learning Rate Scheduler.'}},
'adam': {'default': False,
'flags': ['--adam'],
'argparse':{'action':'store_true','help':'Adam optimizer used.'}},
'huber': {'default': True,
'flags': ['--no_huber'],
'argparse':{'action':'store_false','help':'Use CE loss rather than huber.'}},
'dropout_rate': {'default': 0.0,
'flags': ['--dropout_rate', '-D'],
'argparse':{'type':float}},
'architecture': {'default': 'procedural',
'flags': ['--arch', '-A'],
'argparse':{'type':str,
'choices':['procedural','central-q','joint-q','dec-q','deep-central-q'],
'help':'RL Algo Used "Procedural", "Centralized Q","Joint Q","Decentralized Q","Deep Centralized Q"'}},
'alpha': {'default': 0.2,
'flags': ['--alpha','-a'],
'argparse':{'type':float}},
'epsilon': {'default': 0.7,
'flags': ['--epsilon','-e'],
'argparse':{'type':float}},
'gamma': {'default': 0.9,
'flags': ['--gamma','-g'],
'argparse':{'type':float}},
'num_ants': {'default': 10,
'flags': ['--num_ants', '-N'],
'argparse':{'type':int}},
'max_steps': {'default': 20,
'flags': ['--max_steps', '-M'],
'argparse':{'type':int}},
'wandb': {'default': False,
'flags': ['--wandb'],
'argparse':{'action':'store_true','help':'Turns logging on.'}},
'description': {'default': '',
'flags': ['--des'],
'argparse':{'type':str,'help':'Model Description, used in folder and log naming.'}},
'mode': {'default': 'train',
'flags': ['--mode'],
'argparse':{'type':str,'choices':['train','average'],'help':'Program mode. Options include: "train", "average"'}},
'save_video': {'default': False,
'flags': ['--save_video','-v'],
'argparse':{'action':'store_true','help':'Savining video of simulation'}},
'simulate': {'default': False,
'flags': ['--simulate','-P'],
'argparse':{'action':'store_true','help':'Displaying simulation'}},
'silent': {'default': False,
'flags': ['--silent'],
'argparse':{'action':'store_true','help':'Model training and evaluation runs in silent mode.'}},
'load_model_dir': {'default': None,
'flags': ['--load'],
'argparse':{'type':str,'help':'Path of the file the network weights are initialzed with. If any value is passed, the weights are loaded.'}},
'save_model_dir': {'default': 'models',
'flags': ['--model_dir'],
'argparse':{'type':str,'help':'Path of the directory the model is saved to.'}},
'log_dir': {'default': 'logs',
'flags': ['--log_dir'],
'argparse':{'type':str,'help':'Path of the log directory for W&B or TB.'}},
}
def print_configs(configs=None):
print("\n-------------------------------------------------------------------------------")
print("| {:^75} |".format('Configuration'))
print("| {:^23} | {:^23} | {:^23} |".format('Option Descriptions','Option Strings', 'Values Passed In' if configs else 'Default Values'))
print("-------------------------------------------------------------------------------")
for k,c in default_configs.items():
value = c['default']
if configs: value = getattr(configs, k)
if value is None: value = 'None'
if isinstance(value, bool): value = str(value)
print("| {:<23} | {:<23} | {:<23} |".format(k, ' , '.join(c['flags']), value))
if configs is None and 'help' in c['argparse'].keys(): print(" Help: {} \n".format(c['argparse']['help']))
print("-------------------------------------------------------------------------------\n")
def parse_configs():
import argparse
parser = argparse.ArgumentParser(add_help=False)
# Programatically add default_configs to parser arguments
for k,c in default_configs.items():
parser.add_argument(*c['flags'], dest=k, default=c['default'], **c['argparse'])
parser.add_argument('-h', '--help', dest='help', action='store_true', default=False)
configs = parser.parse_args()
return configs
### END CODE HERE