class_docstr: This is the Sparse Variational GP (SVGP).
  
  The key reference is :cite:t:`hensman2014scalable`.
  
  For a use example see
  :doc:`../../../../notebooks/getting_started/classification_and_other_data_distributions`.
class_docstr_tok: ["This","is","the","Sparse","Variational","GP","(","SVGP",")",".","The","key","reference","is",":","cite",":","t",":","`","hensman2014scalable","`",".","For","a","use","example","see",":","doc",":","`","..","\/","..","\/","..","\/","..","\/notebooks\/getting_started\/classification_and_other_data_distributions","`","."]
docstr: - kernel, likelihood, inducing_variables, mean_function are appropriate
    GPflow objects
  - num_latent_gps is the number of latent processes to use, defaults to 1
  - q_diag is a boolean. If True, the covariance is approximated by a
    diagonal matrix.
  - whiten is a boolean. If True, we use the whitened representation of
    the inducing points.
  - num_data is the total number of observations, defaults to X.shape[0]
    (relevant when feeding in external minibatches)
docstr_tok: ["-","kernel",",","likelihood",",","inducing_variables",",","mean_function","are","appropriate","GPflow","objects","-","num_latent_gps","is","the","number","of","latent","processes","to","use",",","defaults","to","1","-","q_diag","is","a","boolean",".","If","True",",","the","covariance","is","approximated","by","a","diagonal","matrix",".","-","whiten","is","a","boolean",".","If","True",",","we","use","the","whitened","representation","of","the","inducing","points",".","-","num_data","is","the","total","number","of","observations",",","defaults","to","X.shape","[","0","]","(","relevant","when","feeding","in","external","minibatches",")"]
code: def __init__(
      self,
      kernel: Kernel,
      likelihood: Likelihood,
      inducing_variable: InducingVariablesLike,
      *,
      mean_function: Optional[MeanFunction] = None,
      num_latent_gps: int = 1,
      q_diag: bool = False,
      q_mu: Optional[tf.Tensor] = None,
      q_sqrt: Optional[tf.Tensor] = None,
      whiten: bool = True,
      num_data: Optional[tf.Tensor] = None,
  ):
      """
      - kernel, likelihood, inducing_variables, mean_function are appropriate
        GPflow objects
      - num_latent_gps is the number of latent processes to use, defaults to 1
      - q_diag is a boolean. If True, the covariance is approximated by a
        diagonal matrix.
      - whiten is a boolean. If True, we use the whitened representation of
        the inducing points.
      - num_data is the total number of observations, defaults to X.shape[0]
        (relevant when feeding in external minibatches)
      """
      # init the super class, accept args
      super().__init__(
          kernel, likelihood, mean_function, num_latent_gps
      )
      self.num_data = num_data
      self.whiten = whiten
      self.inducing_variable: InducingVariables = inducingpoint_wrapper(
          inducing_variable
      )
  
      # init variational parameters
      num_inducing = self.inducing_variable.num_inducing
      self._init_variational_parameters(
          num_inducing, q_mu, q_sqrt, q_diag
      )
  
imports: from typing import Optional
  import numpy
  import tensorflow
  from check_shapes import check_shapes, inherit_check_shapes
  from ..None import kullback_leiblers, posteriors
  from ..base import AnyNDArray, InputData, MeanAndVariance, Parameter, RegressionData
  from ..conditionals import conditional
  from ..config import default_float
  from ..inducing_variables import InducingVariables
  from ..kernels import Kernel
  from ..likelihoods import Likelihood
  from ..mean_functions import MeanFunction
  from ..utilities import positive, triangular
  from .model import GPModel
  from .training_mixins import ExternalDataTrainingLossMixin
  from .util import InducingVariablesLike, inducingpoint_wrapper
label_desc: Use image node_id 1 to create a new SVGP_deprecated object from inherited base classes: GPModel, ExternalDataTrainingLossMixin with example: obj = SVGP_deprecated(kernel, likelihood, inducing_variable)