如何在 TensorFlow Probability 中创建分布数组?
How can I create an array of distributions in TensorFlow Probability?
我正在尝试使用 Tensorflow Probability 编写代码,以使用 EM 算法对一组样本(来自多个高斯分布)进行分类。
因为我想为任何一般问题编写此代码(如果样本来自 2 个高斯分布或 8 个高斯分布,我希望它能够工作)。
我现在遇到的问题是 我找不到创建 tfd.Normal
.
数组的方法
我想将其作为数组(或其他类似类型的数据),因为这样我可以处理不确定数量的分布。
谁能帮我解决这个问题?
下面的代码是解决方案吗?
true_mu = np.array([20,60], dtype=np.float64)
true_sigma = np.array([8,4], dtype=np.float64)
true_dist = tfd.Normal(loc=true_mu, scale=true_sigma)
TFP 发行版具有开箱即用的批处理能力。您的代码应该可以工作,并表示 2 个正态分布的向量,其中第一个是 N(X|20, 8)
,第二个是 N(X|60, 4)
.
您可以通过 true_dist.batch_shape
查询(在本例中为 return [2]
)。
您现在可以采样:true_dist.sample()
(return 是一个形状为 [2]
的 float64)。
您可以计算概率:true_dist.log_prob(0)
(return 是一个形状为 [2]
的 float64,表示 [log N(0|20, 8), log N(0|60, 4)]
)。
您可以估计每个批次成员的独立概率:true_dist.log_prob([0, 1])
(returns a float64
with shape [2]
, representing [log N(0|20, 8), log N(1|60, 4)]
).
还要注意 TFP 分布广播它们的参数,所以如果你想要两个具有相同位置和不同比例的法线,你可以写 tfd.Normal(0, [10, 20])
.
我正在尝试使用 Tensorflow Probability 编写代码,以使用 EM 算法对一组样本(来自多个高斯分布)进行分类。
因为我想为任何一般问题编写此代码(如果样本来自 2 个高斯分布或 8 个高斯分布,我希望它能够工作)。
我现在遇到的问题是 我找不到创建 tfd.Normal
.
我想将其作为数组(或其他类似类型的数据),因为这样我可以处理不确定数量的分布。
谁能帮我解决这个问题?
下面的代码是解决方案吗?
true_mu = np.array([20,60], dtype=np.float64)
true_sigma = np.array([8,4], dtype=np.float64)
true_dist = tfd.Normal(loc=true_mu, scale=true_sigma)
TFP 发行版具有开箱即用的批处理能力。您的代码应该可以工作,并表示 2 个正态分布的向量,其中第一个是 N(X|20, 8)
,第二个是 N(X|60, 4)
.
您可以通过 true_dist.batch_shape
查询(在本例中为 return [2]
)。
您现在可以采样:true_dist.sample()
(return 是一个形状为 [2]
的 float64)。
您可以计算概率:true_dist.log_prob(0)
(return 是一个形状为 [2]
的 float64,表示 [log N(0|20, 8), log N(0|60, 4)]
)。
您可以估计每个批次成员的独立概率:true_dist.log_prob([0, 1])
(returns a float64
with shape [2]
, representing [log N(0|20, 8), log N(1|60, 4)]
).
还要注意 TFP 分布广播它们的参数,所以如果你想要两个具有相同位置和不同比例的法线,你可以写 tfd.Normal(0, [10, 20])
.