tensorflow - TensorFlow 概率采样需要很长时间
问题描述
我正在尝试使用 tfp 进行采样过程。从 beta 分布中抽取样本,并将结果作为概率输入从二项分布中抽取样本。它花了很长时间才能运行。
我应该以这种方式运行它还是有最佳方式?
'''
import tensorflow_probability as tfp
tfd = tfp.distributions
m = 100000 # sample size
### first sample from Beta distribution
### and feed the result as probability to the binomial distribution sampling
s = tfd.Sample(
tfd.Beta(2,2),
sample_shape = m
)
phi = s.sample()
### Second sample from Binominal distribution
### !!! it took forever to run...
s2 = tfd.Sample(
tfd.Binomial(total_count=10, probs=phi),
sample_shape = m
)
y = s2.sample() # not working well
### scipy code which works well:
from scipy import stats
m = 100000 # sample size
phi = stats.beta.rvs(2, 2, size = m)
y = stats.binom.rvs(10, phi, size = m)
'''
解决方案
TFP 分布支持我们称为“批量形状”的概念。在这里,通过probs=phi
使用 with phi.shape = [100000]
,您有效地创建了 100k 二项式的“批次”。然后你从那些样本中采样 100k 次,它试图创建 1e10 个样本,这需要一段时间!相反,试试这个:
m = 100000
s = tfd.Sample(
tfd.Beta(2,2),
sample_shape = m
)
phi = s.sample()
### Second sample from Binominal distribution
s2 = tfd.Binomial(total_count=10, probs=phi)
y = s2.sample()
或者,使用tfd.BetaBinomial
!
bb = tfd.BetaBinomial(total_count=10, concentration1=2, concentration0=2)
bb.sample(100000)
但最重要的是,看看通过 TFP 的形状语义讨论的示例笔记本:https ://www.tensorflow.org/probability/examples/Understanding_TensorFlow_Distributions_Shapes
干杯!
推荐阅读
- php - 将 url 提供为 dir/file/file 时出现 500 内部错误
- javascript - 我如何检查 onclick 道具比 redux 状态更快
- javascript - 当我 res.redirect(`/relative/url`) 时,收到的响应是 PATCH 404 Not found。如何解决这个问题?
- tensorflow - 如何在一个纪元结束时注销 Keras 自定义损失组件?
- node.js - 我可以在没有网站的情况下使用 react-native 创建像多供应商电子商务这样的网站吗?
- python - 使用networkx图中的数据获取链接到给定节点的所有边
- discord.js - 为什么我的不和谐机器人在我的服务器中只有 3 个成员,而我的服务器有超过 20 个?
- python - 找出哪些渠道比上周数据涨幅超过10%
- flutter - RenderBox 未布置:RenderPhysicalShape#47b25 relayoutBoundary=up2
- daml - 如何比较daml中的两个列表