利用pytorch深度学习框架验证骰子的合格性

发布时间 2023-04-26 20:28:49作者: Bonne_chance

利用pytorch深度学习框架验证骰子的合格性

骰子生产的合格性可以用概率来表达,比如每个面出现的概率大概都是1/6

import torch
from d2l import torch as d2l
from torch.distributions import multinomial # 多次扔骰子出现每个面的概率服从多项式分布
fair_probs = torch.ones([6])/6 # 每个面的概率
  • 进行一组实验的一次抽样
    multinomial.Multinomial(1,fair_probs).sample()
  • 进行一组实验的10次抽样
    multinomial.Multinomial(10,fair_probs).sample()

张量里的元素对应每个面出现的次数,3代表出现0的次数为3

  • 进行一组实验的10000次抽样
    counts = multinomial.Multinomial(10000,fair_probs).sample()

可以看到随着抽样次数增加,每个面出现的次数趋于相等,也就是每个面出现的概率越接近

  • 进行500组实验,每组抽取10个样本
    counts = multinomial.Multinomial(10,fair_probs).sample((500,))#进行500组实验,每组抽取10个样本

    将结果按照x轴累加
    cum_counts = counts.cumsum(dim=0)
  • 将概率估计随着实验组数增加可视化
estimates = cum_counts/cum_counts.sum(dim=1,keepdims=True)
cum_counts.sum(dim=1,keepdims=True)
for i in range(6):
    d2l.plt.plot(estimates[:,i].numpy(),label=("P(die=" + str(i+1)+")"))
d2l.plt.axhline(y=0.167,color='black',linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend()

可以看到随着实验组数增加,每个面的概率趋于1/6