在李沐的动手学深度学习的概率一章,有一个函数
tfp.distributions.Multinomial(1,fair_probs).sample()
先看一下官方文档的介绍:
tfp.distributions.Categorical(
logits=None,
probs=None,
dtype=tf.int32,
validate_args=False,
allow_nan_stats=True,
name='Categorical'
)
This Multinomial distribution is parameterized by probs
, a (batch of) length-K
prob
(probability) vectors (K > 1
) such that tf.reduce_sum(probs, -1) = 1
, and a total_count
number of trials, i.e., the number of trials per draw from the Multinomial. It is defined over a (batch of) length-K
vector counts
such that tf.reduce_sum(counts, -1) = total_count
. The Multinomial is identically the Binomial distribution when K = 2
.
译文:这个多项式分布由probs参数化,probs是一个(批次)长度-K prob(概率)向量(K>1),因此tf。reduce_sum(probs,-1)=1,以及试验的total_count次数,即多项式中每次绘制的试验次数。它是在一(批)长度-K矢量计数上定义的,因此tf。reduce_sum(counts,-1)=总数。当K=2时,多项式为二项式分布。
附上链接:https://tensorflow.google.cn/probability/api_docs/python/tfp/distributions/Multinomial?hl=en
官方说的太官方,我用自己的话简述一下。
fair_probs = tf.ones(6) / 6
print(fair_probs) #tf.Tensor([0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667], shape=(6,), dtype=float32)
print(tfp.distributions.Multinomial(1, fair_probs)).sample()
fair_probs:存上一个元素和为1的列表,每一个元素都代表一个概率。
举个例子:fair_probs = [0.1,0.2,0.3,0.4]
0.1就代表索引为0的概率是0.1
0.2就代表索引为1的概率是0.2
0.3就代表索引为2的概率是0.3
0.4就代表索引为3的概率是0.4。
tfp.distributions.Multinomial(参数1,参数2).sample()
参数1代表进行随机的次数,参数2就是fair_probs。
总和起来就是每次随机都在fair_probs这个列表上进行随机,列表中每个位置被随机到的概率=当前位置的数值大小。总共随机参数1次。
上代码
fair_probs = tf.ones(6) / 6
print(fair_probs)
print(tfp.distributions.Multinomial(1, fair_probs).sample())
上结果:
随机了1次,随机倒了第4个位置。
随机100次试试:
fair_probs = tf.ones(6) / 6
print(fair_probs)
print(tfp.distributions.Multinomial(100, fair_probs).sample())
结果:
大致就是这样,相当于一个摇骰子的功能,其他的参数我也没去了解,太繁琐了。