class_docstr: A trace implementation of ELBO-based SVI. The estimator is constructed
  along the lines of references [1] and [2]. There are no restrictions on the
  dependency structure of the model or the guide. The gradient estimator includes
  partial Rao-Blackwellization for reducing the variance of the estimator when
  non-reparameterizable random variables are present. The Rao-Blackwellization is
  partial in that it only uses conditional independence information that is marked
  by :class:`~pyro.plate` contexts. For more fine-grained Rao-Blackwellization,
  see :class:`~pyro.infer.tracegraph_elbo.TraceGraph_ELBO`.
  
  References
  
  [1] Automated Variational Inference in Probabilistic Programming,
      David Wingate, Theo Weber
  
  [2] Black Box Variational Inference,
      Rajesh Ranganath, Sean Gerrish, David M. Blei
class_docstr_tok: ["A","trace","implementation","of","ELBO-based","SVI",".","The","estimator","is","constructed","along","the","lines","of","references","[","1","]","and","[","2","]",".","There","are","no","restrictions","on","the","dependency","structure","of","the","model","or","the","guide",".","The","gradient","estimator","includes","partial","Rao-Blackwellization","for","reducing","the","variance","of","the","estimator","when","non-reparameterizable","random","variables","are","present",".","The","Rao-Blackwellization","is","partial","in","that","it","only","uses","conditional","independence","information","that","is","marked","by",":","class",":","`","~pyro.plate","`","contexts",".","For","more","fine-grained","Rao-Blackwellization",",","see",":","class",":","`","~pyro.infer.tracegraph_elbo.TraceGraph_ELBO","`",".","References","[","1","]","Automated","Variational","Inference","in","Probabilistic","Programming",",","David","Wingate",",","Theo","Weber","[","2","]","Black","Box","Variational","Inference",",","Rajesh","Ranganath",",","Sean","Gerrish",",","David","M.","Blei"]
docstr: Computes the surrogate loss that can be differentiated with autograd
  to produce gradient estimates for the model and guide parameters
docstr_tok: ["Computes","the","surrogate","loss","that","can","be","differentiated","with","autograd","to","produce","gradient","estimates","for","the","model","and","guide","parameters"]
code: def differentiable_loss(self, model, guide, *args, **kwargs):
      """
      Computes the surrogate loss that can be differentiated with autograd
      to produce gradient estimates for the model and guide parameters
      """
      loss = 0.0
      surrogate_loss = 0.0
      for model_trace, guide_trace in self._get_traces(
          model, guide, args, kwargs
      ):
          (
              loss_particle,
              surrogate_loss_particle,
          ) = self._differentiable_loss_particle(
              model_trace, guide_trace
          )
          surrogate_loss += surrogate_loss_particle / self.num_particles
          loss += loss_particle / self.num_particles
      warn_if_nan(surrogate_loss, "loss")
      return loss + (surrogate_loss - torch_item(surrogate_loss))
  
imports: import weakref
  import pyro
  import pyro.ops.jit
  from pyro.distributions.util import is_identically_zero
  from pyro.infer.elbo import ELBO
  from pyro.infer.enum import get_importance_trace
  from pyro.infer.util import MultiFrameTensor, get_plate_stacks, is_validation_enabled, torch_item
  from pyro.util import check_if_enumerated, warn_if_nan
label_desc: Use image node_id 4 for calling the Trace_ELBO obj's underlying member method code with example usage: obj.differentiable_loss(model, guide) and returns: unknown