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

def on_minibatch_end(self, callback_data, model, epoch, minibatch):

    costs = np.array([c.cost for c in model.cost.costs])
    self.cost_history.append(costs)
    mean_cost = (sum(self.cost_history) / len(self.cost_history))
    mbstart = (callback_data['time_markers/minibatch'][(epoch - 1)] if (epoch > 0) else 0)
    callback_data['multicost/train'][(mbstart + minibatch), :] = mean_cost.squeeze()
    costs_allbranches = np.array([self.multicost_recurse(c) for c in model.cost.costs])
    costs_allbranches = self.separate_branch_costs(costs_allbranches)
    callback_data['multicost/train_allbranches'][(mbstart + minibatch), :] = costs_allbranches.squeeze()
