You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tensorflow Probability中Normal分布CDF低于PDF值的异常问题咨询

TensorFlow Probability Normal分布计算结果异常排查

我在测试Tensorflow Probability的部分用例时遇到异常。回溯后发现,至少在Normal分布中,取值0.9568...对应的PDF值为7.69...e-22,而CDF值仅为7.621...e-24,这在理论与实际场景中均不可能。请问该异常的可能原因是什么?

相关代码:

import tensorflow_probability as tfp

tfd = tfp.distributions
tfb = tfp.bijectors

dist = tfd.Normal(loc=1.0, scale=0.1)
print('sample   :', dist.sample(3).numpy()) #Samples 3 numbers
print('prob     :',dist.prob((0,1,2)).numpy()) #Calculates the probabilities for positions 0,1,2
print('log_prob :',dist.log_prob((0,1,2)).numpy()) #Same as above just log
print('cdf      :',dist.cdf((0,1,2)).numpy()) #Calculates the cummulative distributions
print('mean     :',dist.mean().numpy()) #Returns the mean of the distribution
print('stddev   :',dist.stddev().numpy())

运行结果:

sample   : [0.95685613 1.0321676  1.1132953 ]
prob     : [7.6946093e-22 3.9894230e+00 7.6946093e-22]
log_prob : [-48.616352    1.3836466 -48.616352 ]
cdf      : [7.619853e-24 5.000000e-01 1.000000e+00]
mean     : 1.0
stddev   : 0.1

异常原因排查

  • 核心误解:混淆了样本值与概率计算的输入值:你代码中dist.prob((0,1,2))和dist.cdf((0,1,2))是计算x=0、x=1、x=2这三个点的PDF和CDF值,而非你生成的样本[0.95685613, 1.0321676, 1.1132953]对应的概率。
  • 数值合理性验证:你的Normal分布参数是loc=1.0, scale=0.1,x=0与均值的差为10个标准差((0-1)/0.1 = -10),对于正态分布,如此极端的尾部值对应的PDF和CDF本身就是极小的,这和你得到的结果完全匹配,属于正常数学结果,并非库的异常。
  • 正确计算样本对应概率的方式:若要计算生成样本的PDF和CDF,需将样本作为参数传入,修改代码如下:
samples = dist.sample(3).numpy()
print('sample prob:', dist.prob(samples).numpy())
print('sample cdf:', dist.cdf(samples).numpy())

运行后会得到符合预期的结果,比如样本0.95685613距离均值约-0.43个标准差,对应的CDF约0.33,PDF约3.6,完全符合正态分布的特性。


内容的提问来源于stack exchange,提问作者Ignacio Ojeda Aguirre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:42:45