TensorFlow分布创建的概率大于1



我正在使用tensorflow分布API进行采样,以下是我使用的示例代码,但我发现概率大于1,然后日志概率小于0。CPU和GPU都产生了这一奇怪的结果。张量为1.3。

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
from sklearn.datasets import load_boston
from sklearn.preprocessing import scale
from matplotlib import pyplot as plt
import numpy as np
learning_rate = 0.01
total_features, total_prices = load_boston(True)
# Keep 300 samples for training
train_features = scale(total_features[:300])
train_prices = total_prices[:300]
x = tf.placeholder(tf.float32, [None, 13])
l1 = tf.layers.dense(inputs=x, units=20, activation=tf.nn.elu)
l2 = tf.layers.dense(inputs=l1, units=20, activation=tf.nn.elu)
mu = tf.squeeze(tf.layers.dense(inputs=l2, units=1))
sigma = tf.squeeze(tf.layers.dense(inputs=l2, units=1))
sigma = tf.nn.softplus(sigma) + 1e-5
normal_dist = tf.contrib.distributions.Normal(mu, sigma)
samples = tf.squeeze(normal_dist._sample_n(1))
log_prob = -normal_dist.log_prob(samples)
prob = normal_dist.prob(samples)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
avg_cost = 0.0
feed_dict = {x: train_features}
p = sess.run(prob, feed_dict)
lp = sess.run(log_prob, feed_dict)

P是我的概率输出lp是日志概率

谢谢!

functions .prob和.log_prob是正态分布的pdf和log pdf:https://en.wikipedia.org/wiki/wiki/probibality_densice_function。请注意,PDF不必评估为0到1之间的值;它在一个范围内(与CDF相关)的组成部分必须在0到1之间。

考虑mu = 0sigma = 1e-4的情况。如果我们使用正态分布的PDF:https://en.wikipedia.org/wiki/normal_distribution,则PDF(0)〜= 4000!但是,如果我们要集成PDF并获得CDF(或直接使用CDF),那么我们将始终获得0和1之间的值。

最新更新