TensorFlow概率中分批混合料分布的概率

TensorFlow概率中分批混合料分布的概率,tensorflow,tensorflow-probability,Tensorflow,Tensorflow Probability,TFP发行版应具有开箱即用的批处理能力。然而,我面临着分批混合料分配的问题。 下面是一个玩具示例(使用渴望执行): 基本上,这只是默认示例的一部分: 采样工作正常,但此分布的可预测性返回错误: InvalidArgumentError:cannot compute Add as input#1(基于零)应为双张量,但为浮点张量[Op:Add]name:mixed/prob/Add/ 猜猜看,我做错了什么 注:与批量高斯分布相同的示例效果良好。问题在于numpy默认为float64,但TFP遵循默

TFP发行版应具有开箱即用的批处理能力。然而,我面临着分批混合料分配的问题。 下面是一个玩具示例(使用渴望执行):

基本上,这只是默认示例的一部分:

采样工作正常,但此分布的可预测性返回错误:
InvalidArgumentError:cannot compute Add as input#1(基于零)应为双张量,但为浮点张量[Op:Add]name:mixed/prob/Add/

猜猜看,我做错了什么


注:与批量高斯分布相同的示例效果良好。

问题在于numpy默认为float64,但TFP遵循默认为float32的TF约定。因此,您的正态分布(其参数是裸python列表)在normal的构造函数中被重铸为tf.Tensors作为float32张量,最终导致类型错误。您可以通过强制np数组为float 32进行修复,或者更简单地通过将混合值作为列表而不是ndarray进行传递来进行修复。

谢谢您,克里斯!事实上,问题只在于数据类型。在我使用mix中的列表后,问题就解决了。是否可以将TFP默认值更改为float64?@jajamaharaja遗憾的是,目前没有自动机制来执行此操作。
tfd = tfp.distributions
mix = np.array([[0.6, 0.4],[0.3, 0.7]] )
bimix_gauss = tfd.Mixture(
  cat=tfd.Categorical(probs=mix),
  components=[
    tfd.Normal(loc=[-1.0, -2.0], scale=[0.1, 0.1]),
    tfd.Normal(loc=[+1.0, +2.0], scale=[0.5, 0.5]),
])

print(bimix_gauss.sample())
print(bimix_gauss.prob(0.0))