Sta*_*ham 3 python autoencoder pytorch loss-function
而在很多代码中,例如here、here和here,代码实现为:
KL_loss = -0.5 * torch.sum(1 + logv - mean.pow(2) - logv.exp())
Run Code Online (Sandbox Code Playgroud)
或者
def latent_loss(z_mean, z_stddev):
mean_sq = z_mean * z_mean
stddev_sq = z_stddev * z_stddev
return 0.5 * torch.mean(mean_sq + stddev_sq - torch.log(stddev_sq) - 1)
Run Code Online (Sandbox Code Playgroud)
它们有何关系?为什么代码中没有“tr”或“.transpose()”?
您发布的代码中的表达式假设 X 是不相关的多元高斯随机变量。协方差矩阵的行列式中缺少交叉项,这一点很明显。因此,均值向量和协方差矩阵采用以下形式
使用它,我们可以快速推导出原始表达式的组件的以下等效表示
将这些代回原始表达式给出