tensorflow - Tensorflow 中的高斯对数似然损失函数

标签 tensorflow gaussian autoencoder loss

我需要在 Tensorflow 中实现高斯对数似然损失函数,但是我不确定我写的是否正确。我认为this是损失函数的正确定义。

我像这样实现它:

    two_pi = 2*np.pi

    def gaussian_density_function(x, mean, stddev):

        stddev2 = tf.pow(stddev, 2)
        z = tf.multiply(two_pi, stddev2)
        z = tf.pow(z, 0.5)

        arg = -0.5*(x-mean)
        arg = tf.pow(arg, 2)
        arg = tf.div(arg, stddev2)

        return tf.divide(tf.exp(arg), z)


    mean_x, var_x = tf.nn.moments(dae_output_tensor, [0])
    stddev_x = tf.sqrt(var_x)

    loss_op_AE = -gaussian_density_function(inputs, mean_x, stddev_x)
    loss_op_AE = tf.reduce_mean(loss_op_AE)

我想使用它作为自动编码器的损失函数,但是,我不确定这个实现是否正确,因为我从 loss_op_AE 中得到 NaN。

编辑:我也尝试使用:

    mean_x, var_x = tf.nn.moments(autoencoder_output, axes=[1,2])
    stddev_x = tf.sqrt(var_x)

    dist = tf.contrib.distributions.Normal(mean_x, stddev_x)
    loss_op_AE = -dist.pdf(inputs)

我得到了相同的 NaN 值。

最佳答案

将 stddev 建模为 log stddev,这应该可以解决 nan 问题。因此,不要假装 stddev 是 sigma^2,而是假装它是 sigma^2 的自然对数。

关于tensorflow - Tensorflow 中的高斯对数似然损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568966/

相关文章:

python - 用于安装 Tensorflow 的虚拟环境 : Why Do I need it for Whiich Purpose?

javascript - 如何在javascript中获取高斯滤波器

python - 图像直方图的高斯混合模型

python - 归一化二元概率密度函数 - python

machine-learning - 如何在Keras中实现自定义加权MSE损失函数?

python - Keras 中的 VAE : how to define the end-to-end model?

python - 如何仅在自动编码器训练期间保存编码器部分的最佳权重?

python - 求两个张量的交集。返回两个输入张量中已排序的唯一值

validation - 使用估算器时,将验证监视器替换为 tf.train.SessionRunHook

python - 量化 TFLite 模型比 TF 模型具有更好的精度