def parameters_changed(self):
        """
        Method that is called upon any changes to :class:`~GPy.core.parameterization.param.Param` variables within the model.
        In particular in this class this method re-performs inference, recalculating the posterior, log marginal likelihood and gradients of the model

        .. warning::
            This method is not designed to be called manually, the framework is set up to automatically call this method upon changes to parameters, if you call
            this method yourself, there may be unexpected consequences.
        """
        self.posterior, self._log_marginal_likelihood, grad_dict = self.inference_method.inference(self.kern,
                                                                                                   self.X,
                                                                                                   self.Y_normalized,
                                                                                                   self.nu + 2 + np.finfo(
                                                                                                       float).eps,
                                                                                                   self.mean_function)
        self.kern.update_gradients_full(grad_dict['dL_dK'], self.X)
        if self.mean_function is not None:
            self.mean_function.update_gradients(grad_dict['dL_dm'], self.X)
        self.nu.gradient = grad_dict['dL_dnu']
Method that is called upon any changes to :class:`~GPy.core.parameterization.param.Param` variables within the model.
        In particular in this class this method re-performs inference, recalculating the posterior, log marginal likelihood and gradients of the model

        .. warning::
            This method is not designed to be called manually, the framework is set up to automatically call this method upon changes to parameters, if you call
            this method yourself, there may be unexpected consequences.