Compute the KL divergence between two gaussians.
(mean1, logvar1, mean2, logvar2)
| 506 | |
| 507 | """ Helpers for NLL computation """ |
| 508 | def 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 | |
| 526 | def approx_standard_normal_cdf(x): |
no outgoing calls
no test coverage detected