'Called when an epoch is about to end
Arguments:
callback_data (HDF5 dataset): shared data between callbacks
model (Model): model object
epoch (int): index of epoch that is ending'

def on_epoch_end(self, callback_data, model, epoch):

    for (batch_index, (x, t)) in enumerate(self.valid_set, 1):
        y = model.fprop(x, inference=True)
        np.set_printoptions(formatter={'float': '{:    0.1f}'.format}, linewidth=150)
        columns = (1 + (np.max(t[1].get().nonzero()[1]) // self.be.bsz))
        for (name, item) in zip(['Inputs', 'Outputs', 'Targets'], [x, y, t[0]]):
            neon_logger.display(name)
            printable = item.get()[:, ::self.be.bsz]
            neon_logger.display(printable[:, :columns])
        break
