Deep Learning
Gaussian, LogGaussian PDF in Pytorch
ddokkddokk
2022. 12. 6. 09:44
반응형
def GaussianPDF(mean, logvar, z):
r""" Return the PDF value of z in N(mean,exp(logvar))
mean, logvar : [*, dim_z]
z : [*, N, dim_z]
return: [*, N, dim_z]
"""
if type(mean) is torch.Tensor:
mean, logvar = mean.unsqueeze(-2), logvar.unsqueeze(-2)
return 1/(np.sqrt(2*np.pi)*torch.exp(logvar*0.5)) * torch.exp(-((z-mean)**2) / (2*torch.exp(logvar)))
elif type(mean) is np.ndarray:
mean, logvar = np.expand_dims(mean, axis=-2), np.expand_dims(logvar, axis=-2)
return 1/(np.sqrt(2*np.pi)*np.exp(logvar*0.5)) * np.exp(-((z-mean)**2) / (2*np.exp(logvar)))
return None
def LogGaussianPDF(mean, logvar, z):
r""" Return the log PDF value of z in N(mean,exp(logvar))
mean, logvar : [*, dim_z]
z : [*, N, dim_z]
return: [*, N, dim_z]
"""
if type(mean) is torch.Tensor:
mean, logvar = mean.unsqueeze(-2), logvar.unsqueeze(-2)
return -0.5*np.log(2*np.pi) -0.5*logvar - ((z-mean)**2+1e-6) / (2*torch.exp(logvar)+1e-6)
elif type(mean) is np.ndarray:
mean, logvar = np.expand_dims(mean, axis=-2), np.expand_dims(logvar, axis=-2)
return -0.5*np.log(2*np.pi) -0.5*logvar - ((z-mean)**2+1e-6) / (2*np.exp(logvar)+1e-6)
return None