keras变分自动编码器损失函数

pna*_*eri 6 python autoencoder keras loss-function

我读过Keras 关于 VAE 实现的博客,其中 VAE 损失是这样定义的:

def vae_loss(x, x_decoded_mean):
    xent_loss = objectives.binary_crossentropy(x, x_decoded_mean)
    kl_loss = - 0.5 * K.mean(1 + z_log_sigma - K.square(z_mean) - K.exp(z_log_sigma), axis=-1)
    return xent_loss + kl_loss
Run Code Online (Sandbox Code Playgroud)

我查看了Keras 文档,VAE 损失函数是这样定义的:在这个实现中,reconstruction_loss 乘以original_dim,我在第一个实现中没有看到这一点!

if args.mse:
        reconstruction_loss = mse(inputs, outputs)
    else:
        reconstruction_loss = binary_crossentropy(inputs,
                                                  outputs)

    reconstruction_loss *= original_dim
    kl_loss = 1 + z_log_var - K.square(z_mean) - K.exp(z_log_var)
    kl_loss = K.sum(kl_loss, axis=-1)
    kl_loss *= -0.5
    vae_loss = K.mean(reconstruction_loss + kl_loss)
    vae.add_loss(vae_loss)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么吗?谢谢你!

mam*_*maj 4

第一: CE + mean(kl, axis=-1) = CE + sum(kl, axis=-1) / d

第二个:d * CE + sum(kl, axis=-1)

所以: first_one = second_one / d

请注意,第二个返回所有样本的平均损失,但第一个返回所有样本的损失向量。