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: This gives a variational bound (the evidence lower bound or ELBO) on
  the log marginal likelihood of the model.
docstr_tok: ["This","gives","a","variational","bound","(","the","evidence","lower","bound","or","ELBO",")","on","the","log","marginal","likelihood","of","the","model","."]
code: def elbo(self, data: RegressionData) -> tf.Tensor:
      """
      This gives a variational bound (the evidence lower bound or ELBO) on
      the log marginal likelihood of the model.
      """
      X, Y = data
      kl = self.prior_kl()
      f_mean, f_var = self.predict_f(
          X, full_cov=False, full_output_cov=False
      )
      var_exp = self.likelihood.variational_expectations(
          X, f_mean, f_var, Y
      )
      if self.num_data is not None:
          num_data = tf.cast(self.num_data, kl.dtype)
          minibatch_size = tf.cast(tf.shape(X)[0], kl.dtype)
          scale = num_data / minibatch_size
      else:
          scale = tf.cast(1.0, kl.dtype)
      return tf.reduce_sum(var_exp) * scale - kl
  
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 5 for calling the SVGP_deprecated obj's underlying member method code with example usage: obj.elbo(data) and returns: unknown