Belle II Software  release-05-02-19
tensorflow_dnn_model.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
13 
14 from __future__ import division, print_function, generators
15 
16 import os
17 import sys
18 import time
19 import numpy
20 import pickle
21 
22 import tensorflow as tf
23 
24 
25 class Layer(object):
26  """
27  definition of a layer obj
28  """
29 
30  def __init__(self, name, tf_activation_str, dim_input, dim_output, p_bias, p_w,
31  operation_seed=None):
32  """
33  :param name:
34  :param tf_activation: string, name of an available tensorflow activations function
35  :param dim_input:
36  :param dim_output:
37  :param p_bias: initial constant
38  :param p_w: stddev of uniform distribution to initialize
39  :return:
40  """
41 
42  self.name = name
43 
44  tf_activation_dict = {
45  'tanh': tf.tanh,
46  'sigmoid': tf.sigmoid,
47  'relu': tf.nn.relu,
48  'leaky_relu': tf.nn.leaky_relu,
49  }
50 
51  if tf_activation_str not in tf_activation_dict:
52  raise ValueError
53 
54 
55  self.tf_activation = tf_activation_dict[tf_activation_str]
56 
57 
58  self.seed = None
59 
60 
61  self.shape = [dim_input, dim_output]
62 
63 
64  self.w = self._init_weight(self.shape, p_w, operation_seed)
65 
66 
67  self.b = self._init_bias(self.shape[1], p_bias)
68 
69 
70  self.input = None
71 
72 
73  self.output = None
74 
75 
76  self.is_initialized = False
77 
78 
79  self._add_all_to_summary()
80 
81  def _init_bias(self, width, init_val, name=None):
82  """
83  define bias variables
84  """
85  if name is None:
86  name = self.name + '_b'
87  initial = tf.constant(init_val, shape=[width], name=name)
88  return tf.Variable(initial, name=name)
89 
90  def _init_weight(self, shape, stddev, operation_seed, name=None):
91  """
92  define weight variables
93  """
94  if name is None:
95  name = self.name + '_w'
96  initial = tf.truncated_normal(shape, stddev=stddev, seed=operation_seed, name=name)
97  return tf.Variable(initial, name=name)
98 
99  def initialize(self, layer_input):
100  """
101  initialization, requires layer input
102  """
103  if self.is_initialized:
104  raise RuntimeError('Layer %s is already initialized.' % self.name)
105 
106  self.input = layer_input
107  name = self.name + '_output'
108  with tf.name_scope('output'):
109  self.output = self.tf_activation(tf.matmul(layer_input, self.w) + self.b, name)
110  tf.add_to_collection('output', self.output)
111 
112  # set initialized status
113  self.is_initialized = True
114 
115  def _add_var_to_summary(self, var):
116  """
117  add variables of this layer to tensorboard
118  :param var: tensorflow variable
119  :return:
120  """
121  with tf.name_scope('summaries'):
122  mean = tf.reduce_mean(var)
123  tf.summary.scalar('mean', mean)
124 
125  with tf.name_scope('stddev'):
126  stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
127 
128  tf.summary.scalar('stddev', stddev)
129  tf.summary.scalar('max', tf.reduce_max(var))
130  tf.summary.scalar('min', tf.reduce_min(var))
131 
132  tf.summary.histogram('histogram', var)
133 
135  """
136  adds tuneable parameters to summary
137  """
138  with tf.name_scope(self.name):
139  with tf.name_scope('weights'):
140  self._add_var_to_summary(self.w)
141  with tf.name_scope('biases'):
142  self._add_var_to_summary(self.b)
143 
144 
145 class MultilayerPerceptron(object):
146  """
147  class combine layer obj
148  """
149 
150  def __init__(self, layers):
151  """
152  initialization
153  """
154 
155 
156  self.layers = layers
157 
158 
159  self.input = None
160 
161 
162  self.output = None
163 
164 
165  self.w = None
166 
167 
168  self.b = None
169 
170 
171  self.is_initialized = False
172 
173  @classmethod
174  def from_list(cls, layers):
175  """
176  define layers from list
177  """
178  layer_obj = []
179  for layer in layers:
180  layer_obj.append(Layer(*layer))
181 
182  mlp = cls(layer_obj)
183  return mlp
184 
186  """
187  collect tunable parameters
188  """
189  self.w = []
190  self.b = []
191  for layer in self.layers:
192  self.w.append(layer.w)
193  self.b.append(layer.b)
194 
195  def _connect_layers(self, layer_input):
196  """
197  connect layers
198  """
199  for layer in self.layers:
200  layer.initialize(layer_input)
201  layer_input = layer.output
202 
203  def initialize(self, layer_input):
204  """
205  initialize
206  """
207  if self.is_initialized:
208  raise RuntimeError
209 
210  self.is_initialized = True
211  # check shape
212  for _idx in range(len(self.layers) - 1):
213  assert self.layers[_idx].shape[1] == self.layers[_idx + 1].shape[0]
214 
215  self._connect_layers(layer_input)
217 
218  self.input = self.layers[0].input
219  self.output = self.layers[-1].output
220 
221 
222 class DefaultModel(object):
223  """
224  define the default model
225  """
226 
227  def __init__(self, mlp, mom_init=.9, mom_max=.99, mom_epochs=200, lr_init=.05, lr_min=1e-6,
228  lr_dec_rate=.976,
229  stop_epochs=10, min_epochs=200, max_epochs=1000, wd_coeffs=None, change_optimizer=None,
230  staircase=True, smooth_cross_entropy=False):
231  """
232  initialization function
233  """
234 
235  if wd_coeffs is not None:
236  assert len(wd_coeffs) == len(mlp.layers)
237 
238 
239  self.wd_coeffs = wd_coeffs
240 
241 
242  self.mlp = mlp
243 
244 
245  self.output = None
246 
247  with tf.name_scope('global_step'):
248 
249  self.global_step = tf.Variable(0, trainable=False)
250 
251  # optimizer params
252 
253  self.c_mom_init = mom_init
254 
255  self.c_mom_max = mom_max
256 
257  self.c_mom_epochs = mom_epochs
258 
259 
260  self.c_lr_init = lr_init
261 
262  self.c_lr_min = lr_min
263 
264  self.c_lr_dec_rate = lr_dec_rate
265 
266 
267  self.c_stop_epochs = stop_epochs
268 
269 
270  self.c_staircase = staircase
271 
272 
273  self.batches_per_epoch = None
274 
275 
276  self.optimizers = []
277  # list with epochs in which optimizers will be changed, if None is given, only the default optimizer will be
278 
279  self.optimizer_change_epochs = change_optimizer
280  if change_optimizer is not None:
281  self.optimizer_change_epochs.insert(0, 0)
282  self.optimizer_change_epochs.append(sys.maxsize)
283 
284 
285  self.monitoring_params = None
286 
287  self.monitoring_labels = None
288 
289 
290  self.mon_dict = dict()
291 
292 
293  self.x = None
294 
295  self.y_ = None
296 
297  self.weights = None
298 
299 
300  self.max_epochs = max_epochs
301 
302  # termination criterion
303 
304  self.min_epochs = min_epochs
305 
306 
307  self.termination_criterion = None
308 
309  self.recent_params = []
310 
311  self.best_value = numpy.inf
312 
313 
315 
316 
317  self.smooth_cross_entropy = smooth_cross_entropy
318 
319 
320  self.is_initialized = False
321 
322  def _set_optimizer(self):
323  """
324  set optimizer
325  """
326 
327  t_learning_rate = tf.train.exponential_decay(self.c_lr_init, self.global_step, self.batches_per_epoch,
328  self.c_lr_dec_rate, staircase=self.c_staircase)
329 
330  t_lr_min = tf.Variable(self.c_lr_min, trainable=False)
331 
332  with tf.name_scope('learning_rate'):
333  t_limited_lr = tf.maximum(t_learning_rate, t_lr_min)
334  tf.summary.scalar('learning rate', t_limited_lr)
335 
336  # linear increasing momentum
337  c_mom_dec_rate = (self.c_mom_max - self.c_mom_init) / self.c_mom_epochs
338 
339  t_mom_dec_rate = tf.Variable(c_mom_dec_rate, trainable=False, dtype=tf.float32)
340 
341  t_momentum = tf.Variable(self.c_mom_init, trainable=False, dtype=tf.float32)
342 
343  t_mom_max = tf.Variable(self.c_mom_max, trainable=False, dtype=tf.float32)
344 
345  t_batches_per_epoch = tf.Variable(self.batches_per_epoch, trainable=False, dtype=tf.float32)
346 
347  with tf.name_scope('momentum'):
348  # tf.floor -- 'staircase = true'
349  global_step = tf.cast(self.global_step, tf.float32)
350  if self.c_staircase:
351  t_limited_mom = tf.minimum(t_momentum + t_mom_dec_rate *
352  tf.floor(global_step / t_batches_per_epoch), t_mom_max)
353  else:
354  t_limited_mom = tf.minimum(t_momentum + t_mom_dec_rate *
355  (global_step / t_batches_per_epoch), t_mom_max)
356  tf.summary.scalar('momentum', t_limited_mom)
357 
358  self.mon_dict['learning_rate'] = t_limited_lr
359  self.mon_dict['momentum'] = t_limited_mom
360 
361  with tf.name_scope('optimizer'):
362  self.optimizers.append(tf.train.MomentumOptimizer(t_limited_lr, t_limited_mom))
363  self.optimizers.append(tf.train.GradientDescentOptimizer(t_limited_lr))
364 
365  def _set_loss(self):
366  """
367  set loss
368  """
369 
370  _y = self.mlp.output
371  _y_ = self.y_
372 
373  epsilon = 1e-10
374  t_epsilon = tf.constant(epsilon)
375 
376  # sum over batch
377  with tf.name_scope('cross_entropy'):
378  if self.smooth_cross_entropy:
379  cross_entropy = -tf.reduce_mean(tf.reduce_sum((_y_ * tf.log(_y + t_epsilon) + (1 - _y_) *
380  tf.log(1 - _y + t_epsilon)), 1))
381  else:
382  cross_entropy = -tf.reduce_mean(tf.reduce_sum((_y_ * tf.log(tf.clip_by_value(_y, epsilon, 1))) +
383  ((1 - _y_) * tf.log(tf.clip_by_value((1 - _y),
384  epsilon, 1))), 1))
385  tf.summary.scalar('cross entropy', cross_entropy)
386 
387  loss = cross_entropy
388 
389  if self.wd_coeffs:
390  wd_coeffs = self.wd_coeffs
391  weights = self.mlp.w
392 
393  wd = [tf.constant(coeff) * tf.nn.l2_loss(w) for coeff, w in zip(wd_coeffs, weights)]
394  loss += sum(wd)
395 
396  with tf.name_scope('loss_function'):
397 
398  self.loss = loss
399  tf.summary.scalar('loss', loss)
400 
402  """
403  sets monitoring params
404  """
405 
406  _y = self.mlp.output
407  _y_ = self.y_
408 
409  epsilon = 1e-10
410  t_epsilon = tf.constant(epsilon)
411 
412  with tf.name_scope('mean_cross_entropy'):
413  if self.smooth_cross_entropy:
414  mean_cross_entropy = -tf.reduce_mean(tf.reduce_sum((_y_ * tf.log(_y + t_epsilon) + (1 - _y_) *
415  tf.log(1 - _y + t_epsilon)), 1))
416  else:
417  mean_cross_entropy = -tf.reduce_mean(tf.reduce_sum((_y_ * tf.log(tf.clip_by_value(_y, epsilon, 1))) +
418  ((1 - _y_) * tf.log(tf.clip_by_value((1 - _y),
419  epsilon, 1))), 1))
420  tf.summary.scalar('mean cross entropy', mean_cross_entropy)
421  loss = self.loss
422 
423  self.monitoring_labels = ['mean_cross_entropy', 'loss']
424  self.monitoring_params = [mean_cross_entropy, loss]
425 
426  def _default_termination_criterion(self, monitoring_params, epoch, label_name='mean_cross_entropy',
427  prop_dec=1e-5):
428  """
429  :param monitoring_params:
430  :param epoch:
431  :param label_name:
432  :param steps:
433  :param prop_dec:
434  :return:
435  """
436 
437  loss_idx = self.monitoring_labels.index(label_name)
438  mon_param = monitoring_params[loss_idx]
439 
440  if epoch < self.min_epochs:
441  return False
442 
443  if mon_param < self.best_value * (1. - prop_dec):
444  self.step_countdown = self.c_stop_epochs
445  self.best_value = mon_param
446  else:
447  self.step_countdown -= 1
448 
449  if self.step_countdown > 0:
450  return False
451 
452  return True
453 
454  def get_minimizer(self, epoch=0):
455  """
456  get minimizer
457  """
458 
459  if self.optimizer_change_epochs is None:
460  return self.optimizers[0].minimize(self.loss, self.global_step)
461 
462  if len(self.optimizer_change_epochs) > len(self.optimizers) + 1:
463  raise RuntimeError
464 
465  # switch optimizer for given epoch
466  for i in range(1, len(self.optimizer_change_epochs)):
467  if self.optimizer_change_epochs[i - 1] <= epoch < self.optimizer_change_epochs[i]:
468  return self.optimizers[i - 1].minimize(self.loss, self.global_step)
469 
470  # needs to be called since parameters depends on number of batches
471  def initialize(self, data_set, input_placeholders=None):
472  """
473  initialized
474  """
475  if self.is_initialized:
476  raise RuntimeError
477  self.is_initialized = True
478 
479  self.batches_per_epoch = data_set.batches
480  # placeholders
481  if input_placeholders is None:
482  with tf.name_scope('input'):
483  self.x = tf.placeholder(tf.float32, shape=[None, data_set.feature_number], name='x-input')
484  self.y_ = tf.placeholder(tf.float32, shape=[None, 1], name="y-input")
485  # TODO: implement weights
486  self.weights = tf.placeholder(tf.float32, shape=[None, 1], name="weight-input")
487  else:
488  self.x = input_placeholders[0]
489  self.y_ = input_placeholders[1]
490 
491  # layer input, calls cascade initialization
492  self.mlp.initialize(self.x)
493 
494  self._set_optimizer()
495  self._set_loss()
497 
498  # termination criterion
500 
501 
502 class Trainer(object):
503  """
504  handling the training of the network model
505  """
506 
507  def __init__(self, model, data_set, sess, log_dir=None, save_name=None, monitoring_size=100000,
508  input_placeholders=None):
509  """
510  class to train a predefined model
511  :param model: DefaultModel obj
512  :param data_set: TFData obj
513  :param sess: tensorflow.Session obj
514  :param log_dir: str, directory name of tensorboard loging
515  :param save_name: str, path and name for saving the weightfiles
516  :param monitoring_size: int, number of events of training fraction used for monitoring
517  :param input_placeholders: list of tf.placeholders, [features, targets]
518  """
519 
520 
521  self._time = time.time()
522 
523  self.model = model
524 
525  self.data_set = data_set
526 
527  self.monitoring_size = monitoring_size
528 
529 
530  self.sess = sess
531 
532 
533  self.log_dir = log_dir
534 
535  if input_placeholders is None:
536  with tf.name_scope('input'):
537 
538  self.x = tf.placeholder(tf.float32, shape=[None, data_set.feature_number], name='x-input')
539 
540 
541  self.y_ = tf.placeholder(tf.float32, shape=[None, 1], name="y-input")
542  else:
543 
544  self.x = input_placeholders[0]
545 
546  self.y_ = input_placeholders[1]
547 
548  self.model.initialize(data_set, input_placeholders=[self.x, self.y_])
549 
550 
551  self.monitoring_params = self.model.monitoring_params
552 
553  self.termination_criterion = self.model.termination_criterion
554 
555 
556  self.max_epochs = self.model.max_epochs
557 
558 
559  self.current_epoch = 0
560 
561 
562  self.minimizer = self.model.get_minimizer()
563 
564 
565  self.train_log_dict = {}
566  for label in self.model.monitoring_labels:
567  self.train_log_dict['train_' + label] = []
568  self.train_log_dict['valid_' + label] = []
569 
570  for label in self.model.mon_dict.keys():
571  self.train_log_dict[label] = []
572 
574 
575  if log_dir is not None:
576  self._prepare_tensorboard(log_dir)
577 
578 
579  self.saver = tf.train.Saver()
580 
581  init_op = tf.global_variables_initializer()
582 
583  self.sess.run(init_op)
584 
585  if save_name is None:
586  time_str = time.strftime("%Y%m%d-%H%M%S")
587 
588  self.save_name = os.path.join(os.getcwd(), '_'.join([self.data_set.selection, time_str,
589  'model.ckpt']))
590 
591  else:
592 
593  self.save_name = save_name
594 
595  self._prepare_monitoring()
596 
598  """
599  checking dataset sizes for evaluation
600  """
601 
602  self.train_monitor = -1
603 
604  self.valid_monitor = -1
605  if self.data_set.train_events > self.monitoring_size:
606  self.train_monitor = self.monitoring_size
607 
608  if self.data_set.valid_events > self.monitoring_size:
609  self.valid_monitor = self.monitoring_size
610 
611  def _prepare_tensorboard(self, log_dir):
612  """
613  prepare tensorboard
614  """
615  log_dir_train = os.path.join(log_dir, 'train')
616  log_dir_test = os.path.join(log_dir, 'test')
617 
618 
619  self.train_writer = tf.summary.FileWriter(log_dir_train, self.sess.graph)
620 
621  self.test_writer = tf.summary.FileWriter(log_dir_test, self.sess.graph)
622 
623 
624  self.merged_summary = tf.summary.merge_all()
625 
627  """
628  add to basf2 collection
629  """
630  tf.add_to_collection('x', self.x)
631  tf.add_to_collection('y', self.y_)
632  tf.add_to_collection('activation', self.model.mlp.output)
633  tf.add_to_collection('cost', self.model.loss)
634  tf.add_to_collection('optimizer', self.minimizer)
635 
636  def _save_best_state(self, monitoring_params, label_name='mean_cross_entropy'):
637  """
638  save model only if a global minimum is reached on validation set
639  :return:
640  """
641  # current last state
642  self.saver.save(self.sess, self.save_name.replace('.ckpt', '_current.ckpt'))
643 
644  # check for a not set best value
645  if self.model.best_value == numpy.inf:
646  return
647 
648  loss_idx = self.model.monitoring_labels.index(label_name)
649  mon_param = monitoring_params[loss_idx]
650 
651  if mon_param < self.model.best_value:
652  self.train_log_dict['best_epoch'] = self.current_epoch
653  self.saver.save(self.sess, self.save_name)
654 
655  def _closing_ops(self):
656  """
657  closing ops
658  """
659  if self.log_dir is not None:
660  self.train_writer.close()
661  self.test_writer.close()
662  with open(os.path.join(self.log_dir, 'training_params.pkl'), 'wb') as f:
663  pickle.dump(self.train_log_dict, f)
664 
665  # FIXME: raises an exception when calling session._del -> session.TF_DeleteStatus() !
666  # FIXME: not closing a session can cause memory leaks!
667  # self.sess.close()
668  # del self.sess
669 
670  def _train_epoch(self, current_epoch):
671  """
672  train epoch
673  """
674 
675  # set minimizer for this epoch
676  self.minimizer = self.model.get_minimizer(current_epoch)
677 
678  batch_iter = self.data_set.batch_iterator()
679 
680  for i in range(self.data_set.batches):
681  batch = next(batch_iter)
682  feed = {self.x: batch[0], self.y_: batch[1]}
683  self.sess.run(self.minimizer, feed_dict=feed)
684  if i % int(.2 * self.data_set.batches) == 0:
685  print('Epoch status: %1.2f' % (i / self.data_set.batches))
686 
687  train_mon_dict = {self.x: self.data_set.train_x[:self.train_monitor],
688  self.y_: self.data_set.train_y[:self.train_monitor]}
689 
690  valid_dict = {self.x: self.data_set.valid_x[:self.valid_monitor],
691  self.y_: self.data_set.valid_y[:self.valid_monitor]}
692 
693  # depending on the fact, if the log should be monitored or not
694  if self.log_dir is not None:
695  # todo raise exception if not empty
696 
697  summary = self.sess.run(self.merged_summary, feed_dict=train_mon_dict)
698  self.train_writer.add_summary(summary, current_epoch)
699 
700 
701  self.epoch_parameters = self.sess.run(self.monitoring_params + [self.merged_summary],
702  feed_dict=valid_dict)
703  epoch_parameters_train = self.sess.run(
704  self.monitoring_params + [self.merged_summary], feed_dict=train_mon_dict)
705 
706  # merged summary will be at last position
707  self.test_writer.add_summary(self.epoch_parameters.pop(-1), current_epoch)
708  else:
709  self.epoch_parameters = self.sess.run(self.monitoring_params,
710  feed_dict=valid_dict)
711  epoch_parameters_train = self.sess.run(self.monitoring_params, feed_dict=train_mon_dict)
712 
713  model_mon_params = []
714  for key, entry in self.model.mon_dict.items():
715  model_mon_params.append((key, self.sess.run(entry)))
716 
717  print('Current Epoch: %d' % self.current_epoch)
718  for label, param in zip(self.model.monitoring_labels, self.epoch_parameters):
719  self.train_log_dict['valid_' + label].append(param)
720  print("valid: %s: %1.5f" % (label, param))
721  for label, param in zip(self.model.monitoring_labels, epoch_parameters_train):
722  print("train: %s: %1.5f" % (label, param))
723  self.train_log_dict['train_' + label].append(param)
724 
725  for val in model_mon_params:
726  print("%s: %f" % val)
727  self.train_log_dict[val[0]].append(val[1])
728 
729  print('Epoch training time: %.1f' % (time.time() - self._time))
730  self._time = time.time()
731  print('\n')
732  self.current_epoch += 1
733 
734  def train_model(self):
735  """
736  train model
737  """
738  for epoch in range(self.max_epochs):
739  self._train_epoch(epoch)
740 
742 
743  if self.termination_criterion(self.epoch_parameters, epoch):
744  break
745 
746  self._closing_ops()
dft.tensorflow_dnn_model.MultilayerPerceptron
Definition: tensorflow_dnn_model.py:145
dft.tensorflow_dnn_model.DefaultModel.optimizer_change_epochs
optimizer_change_epochs
used opimizers
Definition: tensorflow_dnn_model.py:276
dft.tensorflow_dnn_model.DefaultModel._default_termination_criterion
def _default_termination_criterion(self, monitoring_params, epoch, label_name='mean_cross_entropy', prop_dec=1e-5)
Definition: tensorflow_dnn_model.py:426
dft.tensorflow_dnn_model.DefaultModel.y_
y_
targets
Definition: tensorflow_dnn_model.py:292
dft.tensorflow_dnn_model.DefaultModel._set_loss
def _set_loss(self)
Definition: tensorflow_dnn_model.py:365
dft.tensorflow_dnn_model.Layer.tf_activation
tf_activation
activation function
Definition: tensorflow_dnn_model.py:54
dft.tensorflow_dnn_model.DefaultModel.c_stop_epochs
c_stop_epochs
number of epochs until stopping
Definition: tensorflow_dnn_model.py:264
dft.tensorflow_dnn_model.Trainer.valid_monitor
valid_monitor
valid monitor
Definition: tensorflow_dnn_model.py:604
dft.tensorflow_dnn_model.DefaultModel.step_countdown
step_countdown
step countdown
Definition: tensorflow_dnn_model.py:311
dft.tensorflow_dnn_model.Layer._init_weight
def _init_weight(self, shape, stddev, operation_seed, name=None)
Definition: tensorflow_dnn_model.py:90
dft.tensorflow_dnn_model.Trainer.data_set
data_set
data set
Definition: tensorflow_dnn_model.py:524
dft.tensorflow_dnn_model.DefaultModel.monitoring_params
monitoring_params
params for monitoring
Definition: tensorflow_dnn_model.py:282
dft.tensorflow_dnn_model.Trainer.test_writer
test_writer
test writer
Definition: tensorflow_dnn_model.py:621
dft.tensorflow_dnn_model.DefaultModel.c_lr_dec_rate
c_lr_dec_rate
learning rate decay factor
Definition: tensorflow_dnn_model.py:261
dft.tensorflow_dnn_model.Layer.shape
shape
layer shape
Definition: tensorflow_dnn_model.py:60
dft.tensorflow_dnn_model.Layer._add_var_to_summary
def _add_var_to_summary(self, var)
Definition: tensorflow_dnn_model.py:115
dft.tensorflow_dnn_model.MultilayerPerceptron.__init__
def __init__(self, layers)
Definition: tensorflow_dnn_model.py:150
dft.tensorflow_dnn_model.DefaultModel.initialize
def initialize(self, data_set, input_placeholders=None)
Definition: tensorflow_dnn_model.py:471
dft.tensorflow_dnn_model.MultilayerPerceptron._connect_layers
def _connect_layers(self, layer_input)
Definition: tensorflow_dnn_model.py:195
dft.tensorflow_dnn_model.MultilayerPerceptron.layers
layers
layer objs
Definition: tensorflow_dnn_model.py:156
dft.tensorflow_dnn_model.Layer.__init__
def __init__(self, name, tf_activation_str, dim_input, dim_output, p_bias, p_w, operation_seed=None)
Definition: tensorflow_dnn_model.py:30
dft.tensorflow_dnn_model.DefaultModel.__init__
def __init__(self, mlp, mom_init=.9, mom_max=.99, mom_epochs=200, lr_init=.05, lr_min=1e-6, lr_dec_rate=.976, stop_epochs=10, min_epochs=200, max_epochs=1000, wd_coeffs=None, change_optimizer=None, staircase=True, smooth_cross_entropy=False)
Definition: tensorflow_dnn_model.py:227
dft.tensorflow_dnn_model.Trainer.__init__
def __init__(self, model, data_set, sess, log_dir=None, save_name=None, monitoring_size=100000, input_placeholders=None)
Definition: tensorflow_dnn_model.py:507
dft.tensorflow_dnn_model.DefaultModel._set_monitoring_params
def _set_monitoring_params(self)
Definition: tensorflow_dnn_model.py:401
dft.tensorflow_dnn_model.Layer.w
w
init parameters for uniform distribution
Definition: tensorflow_dnn_model.py:63
dft.tensorflow_dnn_model.Layer.output
output
output
Definition: tensorflow_dnn_model.py:72
dft.tensorflow_dnn_model.DefaultModel.min_epochs
min_epochs
min epochs
Definition: tensorflow_dnn_model.py:301
dft.tensorflow_dnn_model.Layer._add_all_to_summary
def _add_all_to_summary(self)
Definition: tensorflow_dnn_model.py:134
dft.tensorflow_dnn_model.Layer.seed
seed
random seed
Definition: tensorflow_dnn_model.py:57
dft.tensorflow_dnn_model.Layer.is_initialized
is_initialized
check if initialized (input and output are connected)
Definition: tensorflow_dnn_model.py:75
dft.tensorflow_dnn_model.DefaultModel.recent_params
recent_params
recent params
Definition: tensorflow_dnn_model.py:306
dft.tensorflow_dnn_model.Trainer.log_dir
log_dir
log directory
Definition: tensorflow_dnn_model.py:532
dft.tensorflow_dnn_model.Trainer.termination_criterion
termination_criterion
termination criterion
Definition: tensorflow_dnn_model.py:552
dft.tensorflow_dnn_model.MultilayerPerceptron.input
input
input
Definition: tensorflow_dnn_model.py:159
dft.tensorflow_dnn_model.Trainer.train_model
def train_model(self)
Definition: tensorflow_dnn_model.py:734
dft.tensorflow_dnn_model.DefaultModel.batches_per_epoch
batches_per_epoch
batches per epoch unknown.
Definition: tensorflow_dnn_model.py:270
dft.tensorflow_dnn_model.DefaultModel.output
output
output
Definition: tensorflow_dnn_model.py:242
dft.tensorflow_dnn_model.Trainer.minimizer
minimizer
optimizer
Definition: tensorflow_dnn_model.py:561
dft.tensorflow_dnn_model.Layer.initialize
def initialize(self, layer_input)
Definition: tensorflow_dnn_model.py:99
dft.tensorflow_dnn_model.Trainer.monitoring_params
monitoring_params
monitoring params for early stopping criterion, loss function, etc
Definition: tensorflow_dnn_model.py:550
dft.tensorflow_dnn_model.MultilayerPerceptron.w
w
weights
Definition: tensorflow_dnn_model.py:165
dft.tensorflow_dnn_model.DefaultModel.c_lr_init
c_lr_init
initial learning rate
Definition: tensorflow_dnn_model.py:257
dft.tensorflow_dnn_model.Trainer.model
model
model
Definition: tensorflow_dnn_model.py:522
dft.tensorflow_dnn_model.MultilayerPerceptron._set_weights_and_biases
def _set_weights_and_biases(self)
Definition: tensorflow_dnn_model.py:185
dft.tensorflow_dnn_model.DefaultModel.c_mom_max
c_mom_max
maximum momentum
Definition: tensorflow_dnn_model.py:252
dft.tensorflow_dnn_model.DefaultModel.weights
weights
weights
Definition: tensorflow_dnn_model.py:294
dft.tensorflow_dnn_model.MultilayerPerceptron.b
b
biases
Definition: tensorflow_dnn_model.py:168
dft.tensorflow_dnn_model.DefaultModel.global_step
global_step
global step
Definition: tensorflow_dnn_model.py:246
dft.tensorflow_dnn_model.MultilayerPerceptron.initialize
def initialize(self, layer_input)
Definition: tensorflow_dnn_model.py:203
dft.tensorflow_dnn_model.Trainer
Definition: tensorflow_dnn_model.py:502
dft.tensorflow_dnn_model.Layer
Definition: tensorflow_dnn_model.py:25
dft.tensorflow_dnn_model.Trainer.merged_summary
merged_summary
summary
Definition: tensorflow_dnn_model.py:624
dft.tensorflow_dnn_model.Trainer.max_epochs
max_epochs
global_training_parameters
Definition: tensorflow_dnn_model.py:555
dft.tensorflow_dnn_model.DefaultModel.mon_dict
mon_dict
further monitoring variables
Definition: tensorflow_dnn_model.py:287
dft.tensorflow_dnn_model.DefaultModel.c_staircase
c_staircase
use staircase
Definition: tensorflow_dnn_model.py:267
dft.tensorflow_dnn_model.DefaultModel.mlp
mlp
network model
Definition: tensorflow_dnn_model.py:239
dft.tensorflow_dnn_model.Layer.b
b
init parameters for bias
Definition: tensorflow_dnn_model.py:66
dft.tensorflow_dnn_model.DefaultModel.optimizers
optimizers
define multiple optimizers
Definition: tensorflow_dnn_model.py:273
dft.tensorflow_dnn_model.Trainer._prepare_tensorboard
def _prepare_tensorboard(self, log_dir)
Definition: tensorflow_dnn_model.py:611
dft.tensorflow_dnn_model.DefaultModel.c_lr_min
c_lr_min
minimal learning rate
Definition: tensorflow_dnn_model.py:259
dft.tensorflow_dnn_model.Trainer._time
_time
time
Definition: tensorflow_dnn_model.py:520
dft.tensorflow_dnn_model.Trainer.x
x
input placeholder features
Definition: tensorflow_dnn_model.py:537
dft.tensorflow_dnn_model.DefaultModel
Definition: tensorflow_dnn_model.py:222
dft.tensorflow_dnn_model.Layer.name
name
layer parameters
Definition: tensorflow_dnn_model.py:41
dft.tensorflow_dnn_model.Trainer._prepare_monitoring
def _prepare_monitoring(self)
Definition: tensorflow_dnn_model.py:597
dft.tensorflow_dnn_model.Trainer.save_name
save_name
save name
Definition: tensorflow_dnn_model.py:587
dft.tensorflow_dnn_model.Trainer.monitoring_size
monitoring_size
monitoring size
Definition: tensorflow_dnn_model.py:526
dft.tensorflow_dnn_model.DefaultModel.wd_coeffs
wd_coeffs
weight decay coefficients
Definition: tensorflow_dnn_model.py:236
dft.tensorflow_dnn_model.Trainer.current_epoch
current_epoch
current epoch
Definition: tensorflow_dnn_model.py:558
dft.tensorflow_dnn_model.Trainer.y_
y_
input placeholder targets
Definition: tensorflow_dnn_model.py:540
dft.tensorflow_dnn_model.Trainer._closing_ops
def _closing_ops(self)
Definition: tensorflow_dnn_model.py:655
dft.tensorflow_dnn_model.DefaultModel.x
x
variable space must be known
Definition: tensorflow_dnn_model.py:290
dft.tensorflow_dnn_model.Trainer._save_best_state
def _save_best_state(self, monitoring_params, label_name='mean_cross_entropy')
Definition: tensorflow_dnn_model.py:636
dft.tensorflow_dnn_model.Layer.input
input
input
Definition: tensorflow_dnn_model.py:69
dft.tensorflow_dnn_model.Trainer.sess
sess
tf.session
Definition: tensorflow_dnn_model.py:529
dft.tensorflow_dnn_model.Trainer.train_writer
train_writer
train writer
Definition: tensorflow_dnn_model.py:619
dft.tensorflow_dnn_model.MultilayerPerceptron.from_list
def from_list(cls, layers)
Definition: tensorflow_dnn_model.py:174
dft.tensorflow_dnn_model.DefaultModel.is_initialized
is_initialized
check if initialized
Definition: tensorflow_dnn_model.py:317
dft.tensorflow_dnn_model.Trainer.saver
saver
saver
Definition: tensorflow_dnn_model.py:578
dft.tensorflow_dnn_model.DefaultModel.get_minimizer
def get_minimizer(self, epoch=0)
Definition: tensorflow_dnn_model.py:454
dft.tensorflow_dnn_model.Trainer._add_to_basf2_collections
def _add_to_basf2_collections(self)
Definition: tensorflow_dnn_model.py:626
dft.tensorflow_dnn_model.DefaultModel.max_epochs
max_epochs
other variables
Definition: tensorflow_dnn_model.py:297
dft.tensorflow_dnn_model.DefaultModel.loss
loss
cross entropy with weight decay
Definition: tensorflow_dnn_model.py:398
dft.tensorflow_dnn_model.DefaultModel.termination_criterion
termination_criterion
termination criterion
Definition: tensorflow_dnn_model.py:304
dft.tensorflow_dnn_model.DefaultModel._set_optimizer
def _set_optimizer(self)
Definition: tensorflow_dnn_model.py:322
dft.tensorflow_dnn_model.Trainer._train_epoch
def _train_epoch(self, current_epoch)
Definition: tensorflow_dnn_model.py:670
dft.tensorflow_dnn_model.Trainer.epoch_parameters
epoch_parameters
epoch parameters
Definition: tensorflow_dnn_model.py:701
dft.tensorflow_dnn_model.DefaultModel.best_value
best_value
the best value will be set a default start value, then updated with the termination criterion
Definition: tensorflow_dnn_model.py:308
dft.tensorflow_dnn_model.DefaultModel.c_mom_init
c_mom_init
initial momentum
Definition: tensorflow_dnn_model.py:250
dft.tensorflow_dnn_model.DefaultModel.monitoring_labels
monitoring_labels
params for labeling
Definition: tensorflow_dnn_model.py:284
dft.tensorflow_dnn_model.Trainer.train_monitor
train_monitor
train_monitor
Definition: tensorflow_dnn_model.py:602
dft.tensorflow_dnn_model.MultilayerPerceptron.output
output
output
Definition: tensorflow_dnn_model.py:162
dft.tensorflow_dnn_model.Trainer.train_log_dict
train_log_dict
train_log_dict
Definition: tensorflow_dnn_model.py:564
dft.tensorflow_dnn_model.DefaultModel.smooth_cross_entropy
smooth_cross_entropy
True for a small epsilon addition, false for a clipped network output.
Definition: tensorflow_dnn_model.py:314
dft.tensorflow_dnn_model.MultilayerPerceptron.is_initialized
is_initialized
set all mlp parameters
Definition: tensorflow_dnn_model.py:171
dft.tensorflow_dnn_model.Layer._init_bias
def _init_bias(self, width, init_val, name=None)
Definition: tensorflow_dnn_model.py:81
dft.tensorflow_dnn_model.DefaultModel.c_mom_epochs
c_mom_epochs
momentum epochs
Definition: tensorflow_dnn_model.py:254