MCPcopy Index your code
hub / github.com/CompVis/diff2flow / normal_kl

Function normal_kl

diff2flow/ddpm.py:508–523  ·  view source on GitHub ↗

Compute the KL divergence between two gaussians.

(mean1, logvar1, mean2, logvar2)

Source from the content-addressed store, hash-verified

506
507""" Helpers for NLL computation """
508def normal_kl(mean1, logvar1, mean2, logvar2):
509 """ Compute the KL divergence between two gaussians. """
510 tensor = None
511 for obj in (mean1, logvar1, mean2, logvar2):
512 if isinstance(obj, torch.Tensor):
513 tensor = obj
514 break
515 assert tensor is not None, "at least one argument must be a Tensor"
516 logvar1, logvar2 = [
517 x if isinstance(x, torch.Tensor) else torch.tensor(x).to(tensor)
518 for x in (logvar1, logvar2)
519 ]
520 return 0.5 * (
521 -1.0 + logvar2 - logvar1 + torch.exp(logvar1 - logvar2)
522 + ((mean1 - mean2) ** 2) * torch.exp(-logvar2)
523 )
524
525
526def approx_standard_normal_cdf(x):

Callers 2

prior_bpdMethod · 0.70
_vb_terms_bpdMethod · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected