# Calculating KL divergence between two Gaussians with .distributions package

I’m looking to estimate the KL divergence using monte carlo sampling. When I do the non MC version I get excellent results. When I replace with the MC version, I get bad results.

Anyone know what I’m doing wrong?

``````        z_mu, z_var = self.enc(x)

# ---------
# sample Z
# ---------
# init likelihood and prior
std = torch.exp(z_var / 2)

# Normal likelihood
Q = torch.distributions.normal.Normal(z_mu, std)

# Normal(0, 1) prior
P = torch.distributions.normal.Normal(loc=torch.zeros_like(z_mu), scale=torch.ones_like(std))

# sample Z
z = Q.rsample()

# KL div
qz = Q.log_prob(z)
pz = P.log_prob(z)

kl_loss = torch.mean(qz - pz)
``````

Is not it a dimension problem ? When you apply the log_prob function, would not you do it to each sample ?

what do you mean? isn’t every z independent from every other z for each batch item?