尺寸在VAE中不匹配

时间:2019-06-02 02:33:39

标签: python tensorflow machine-learning

这是VAE的损失函数,我有点受其困扰。最后一行是生成误差,因为无法在形状为[?,2]和[?,784]的两个张量之间进行加法运算,这是完全有效的,因为kl_loss在潜矢量的均值和标准偏差之间,而重建损失是二进制交叉熵。 T

   def vae_loss(original_image,reconstructed_image):
        # E P(X|Z)
        reconstruction_loss = K.sum(original_image*(K.log(reconstructed_image))+ (1-original_image)*K.log(1-reconstructed_image),axis=1)
        kl_loss = 0.5*K.sum(K.exp(log_stddev) + K.square(mean) -1 - log_stddev,axis=1)
        return kl_loss+reconstruction_loss

在这里,我通过以下函数给潜在向量建模

def create_latent_vector(args):
    mean,log_stddev = args
    epsilon = K.random_normal(shape = (batch_size,latent_vector_dimension), mean=0,stddev = 1.0)
    return mean + K.exp(log_stddev*0.5)*epsilon

批处理大小为32,而latent_vector_dimension为2。发生尺寸错误绝对有效,但我无法解决。如何在大小[?,2]的kl_loss和大小为784的construction_loss之间匹配大小?顺便说一下,数据是简单的。

1 个答案:

答案 0 :(得分:0)

在您的kl_loss中,潜在代码中的每个随机变量都有一个术语,只需按最后一个轴求和即可得到形状[?]的损失,即每批元素的损失。

就您的reconstruction_loss而言,它应该已经是[?]而不是[?, 784]的形状,因为您已经沿着我认为是扁平像素轴的方向求和了。