def __init__(self, variables, mini_batch_size, state_updates, dataset, updates=None): theano_variables = [] monitored_quantities = [] for variable in variables: if isinstance(variable, MonitoredQuantity): monitored_quantities.append(variable) else: theano_variables.append(variable) self.theano_variables = theano_variables self.monitored_quantities = monitored_quantities variable_names = [v.name for v in variables] if len(set(variable_names)) < len(variables): raise ValueError("variables should have different names") self.theano_buffer = AggregationBuffer(theano_variables) self.monitored_quantities_buffer = MonitoredQuantityBuffer( monitored_quantities) self.dataset = dataset self.updates = updates self.mini_batch_size = mini_batch_size self._compile(state_updates)
def __init__(self, variables, **kwargs): kwargs.setdefault("before_training", True) super(TrainingDataMonitoring, self).__init__(**kwargs) self.add_condition(['after_batch'], arguments=('just_aggregate', )) self._non_variables = [] self._variables = [] for variable_or_not in variables: if isinstance(variable_or_not, theano.Variable): self._variables.append(variable_or_not) elif isinstance(variable_or_not, MonitoredQuantity): self._non_variables.append(variable_or_not) else: raise ValueError("can not monitor {}".format(variable_or_not)) self._non_variables = MonitoredQuantityBuffer(self._non_variables) self._required_for_non_variables = AggregationBuffer( [take_last(v) for v in self._non_variables.requires]) self._variables = AggregationBuffer(self._variables, use_take_last=True) self._last_time_called = -1