-
Notifications
You must be signed in to change notification settings - Fork 26
/
mlp_function_caller.py
74 lines (65 loc) · 2.53 KB
/
mlp_function_caller.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
"""
Function caller for the MLP experiments.
"""
# pylint: disable=arguments-differ
import cPickle as pic
import os
from time import sleep
from copy import deepcopy
# Local
from opt.nn_function_caller import NNFunctionCaller
import cg.run_tensorflow
_MAX_TRIES = 3
_SLEEP_BETWEEN_TRIES_SECS = 3
def get_default_mlp_tf_params():
""" Default MLP training parameters for tensorflow. """
return {
'trainBatchSize':256,
'valiBatchSize':1000,
'trainNumStepsPerLoop':100,
'valiNumStepsPerLoop':5,
'numLoops':200,
'learningRate':0.00001,
}
class MLPFunctionCaller(NNFunctionCaller):
""" Function caller to be used in the MLP experiments. """
def __init__(self, *args, **kwargs):
super(MLPFunctionCaller, self).__init__(*args, **kwargs)
# Load data
with open(self.train_params.data_train_file, 'rb') as input_file:
data = pic.load(input_file)
self.data_train = data['train']
self.data_vali = data['vali']
self.reporter.writeln('Loaded data: ' + self.train_params.data_train_file)
self.reporter.writeln('Training data shape: ' + 'x: ' +
str(self.data_train['x'].shape) +
', ' + 'y: ' + str(self.data_train['y'].shape))
self.reporter.writeln('Validation data shape: ' + 'x: ' +
str(self.data_vali['x'].shape) +
', ' + 'y: ' + str(self.data_vali['y'].shape))
# Check tf_params
if not hasattr(self.train_params, 'tf_params'):
self.train_params.tf_params = get_default_mlp_tf_params()
if self.domain.get_type() == 'mlp-class':
self.train_params.tf_params = deepcopy(self.train_params.tf_params)
self.train_params.tf_params['num_classes'] = self.data_train['y'].shape[1]
def _eval_validation_score(self, nn, qinfo, noisy=False):
""" Evaluates the validation score. """
# pylint: disable=bare-except
# pylint: disable=unused-argument
os.environ['CUDA_VISIBLE_DEVICES'] = str(qinfo.worker_id)
num_tries = 0
succ_eval = False
while num_tries < _MAX_TRIES and not succ_eval:
try:
vali_score = cg.run_tensorflow.compute_validation_error(nn, self.data_train,
self.data_vali, 0, self.train_params.tf_params, self.tmp_dir)
succ_eval = True
except:
sleep(_SLEEP_BETWEEN_TRIES_SECS)
num_tries += 1
self.reporter.writeln('********* Failed on try %d with gpu %d.'%(
num_tries, qinfo.worker_id))
return vali_score