'Compute the actual fprop from op-tree, update the global estimations
Arguments:
inputs (Tensor): input data
inference (bool): is inference only
Returns:
Tensor: output data'

def fprop(self, inputs, inference=False):

    if inference:
        return self._fprop_inference(inputs)
    self.init_buffers(inputs)
    if (self.allparams is None):
        self.init_params(self.nfm)
        self.fprop_op_tree = self.get_forward_optree()
    self.y[:] = self.fprop_op_tree
    self.gmean[:] = ((self.gmean * self.rho) + ((1.0 - self.rho) * self.be.mean(self.x, axis=1)))
    self.gvar[:] = ((self.gvar * self.rho) + ((1.0 - self.rho) * self.be.var(self.x, axis=1)))
    return self.outputs
