Source code for polaris.trials

import numpy as np

STATUS_FAILURE = 1
STATUS_SUCCESS = 2


[docs]class Trials(object): """ A class for storing trials data. """ def __init__(self): self.trials = [] self.lowest_loss = np.inf self.best_params = None self.last_params = None # instance variables for optimizers self._train_x = None self._train_y = None def __len__(self): return len(self.trials)
[docs] def get_train_data(self): """ A method to get train data. The train data is arranged in alphabetical order of the name of parameters. """ return self._train_x, self._train_y
[docs] def add(self, result, params, exp_info=None): """ A method to add each trial result """ loss = result.get('loss', np.inf) t = { 'result': result, 'loss': loss, 'params': params, 'exp_key': exp_info['exp_key'], 'eval_count': exp_info['eval_count'], } if result['status'] == STATUS_SUCCESS: t['status'] = STATUS_SUCCESS # Because the iteration order is not determinstic, # sort params dictionary by alphabetical order. train_x_row = [] for key in sorted(params): train_x_row.append(params[key]) if self._train_x is None: self._train_x = np.array([train_x_row]) else: self._train_x = np.vstack((self._train_x, train_x_row)) if self._train_y is None: self._train_y = np.array([loss]) else: self._train_y = np.hstack((self._train_y, loss)) else: t['status'] = STATUS_FAILURE # Update last_params last_params = [] for k in sorted(params): last_params.append(params[k]) self.last_params = np.array(last_params) # Set lowest loss to calculate expected improvements. if loss < self.lowest_loss: self.lowest_loss = loss self.best_params = params self.trials.append(t) return