即看即用 && 随机抽样 ( Random sampling) && Pytorch官方文档总结 && 笔记 (三)

本文介绍了正态分布和伯努利分布的基本概念,包括均值、标准差在描述数据分布中的作用。通过Python的PyTorch库展示了如何进行随机数生成,包括从伯努利分布和正态分布中抽取样本的代码示例,以及种子设置和随机数状态管理的方法。
摘要由CSDN通过智能技术生成

目录

(1)本文涉及函数的列表(注释在代码中)

(2)理解正态分布、均值和标准差(mean and std)

(3)伯努利分布(别名:“零一分布”、“两点分布”)

(4)代码示例(含注释)


(1)本文涉及函数的列表(注释在代码中)

  1. torch.manual_seed                  # 设置种子,生成的随机数相同
  2. torch.initial_seed()                   #返回生成随机数的原始种子值
  3. torch.get_rng_state()               # 返回随机生成器状态 torch.Size([5056])
  4. torch.Tensor(3, 3).uniform_()   # 随机数在0-1之间
  5. torch.bernoulli                          # 从伯努利分布中抽取二元随机数(0 或者 1)
  6. torch.multinomial                     # 抽出指定的样本数,返回张量的索引
  7. torch.normal(mean, std)          # 返回从离散正态分布中抽取的随机数

(2)理解正态分布、均值和标准差(mean and std)

若随机变量X服从一个数学期望为μ、方差为σ**2的正态分布,记为N(μ,σ**2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

均值和标准差适用于描述对称分布。在统计工作中,平均数(均值)和标准差是描述数据资料集中趋势和离散程度的两个最重要的测度值。

标准差:观察值和均值(mean)之间的平均距离。

  • 标准差高表明,一组数据分布幅度比较大,比如 1,5,10,15,‘20’,25,30,35,39
  • 标准差低表明,每一个数和均值的距离比较近,幅度小,数据整体分布靠近中心。比如16,17,18,19,‘20’,21,22,23,24

aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9oUlU3R2RPM3JNVXFlVnp0NGVIV1JtZDFEUmhCYlBFdUVYaHRFZUJ0MGlicUhiM3Jzb0haVUZ0ODFJd2xJRFNVZVRJYUhXV0tSeXRpYnVCNldoYTZpYnhjQS82NDA (572×498)

(3)伯努利分布(别名:“零一分布”、“两点分布”)

伯努利分布指的是对于随机变量X有:参数为p(0<p<1),如果它分别以概率p和1-p取1和0为值。伯努利实验成功的次数服从伯努利分布,参数p是试验成功的概率。伯努利分布是一个离散型机率分布,是N=1时二项分布的特殊情况,为纪念瑞士科学家詹姆斯·伯努利(Jacob Bernoulli 或James Bernoulli)而命名。

公式:

均值:EX= p

方差:DX=p(1-p)

一个非常简单的试验是只有两个可能结果的试验,比如正面或反面,成功或失败,有缺陷或没有缺陷,病人康复或未康复。为方便起见,记这两个可能的结果为0和1。

 (4)代码示例(含注释)

"""
随机抽样 Random sampling
"""
import torch

# # 设定生成随机数的种子,并返回一个 torch._C.Generator 对象.
# # 种子设置的不一样,生成的随机数也不一样
# # rng: 随机数发生器
generator = torch.manual_seed(seed=0)  # 实例化一个生产器对象
obj1 = torch.initial_seed()  # 返回生成随机数的原始种子值(python long)。
obj2 = torch.get_rng_state()  # 返回随机生成器状态(ByteTensor)

# print(torch.squeeze(torch.zeros(5056, 1, dtype=torch.uint8)))
# torch.set_rng_state(torch.squeeze(torch.ones(5056, 1, dtype=torch.uint8)))

obj3 = torch.randn(2, 3)  # 设置种子后,每一次随机生成的张量都一样!!!

# # 从伯努利分布中抽取二元随机数(0 或者 1)。
# # 输入张量须包含用于抽取上述二元随机值的概率。 因此,输入中的所有值都必须在[0,1]区间,即 0<=input<=1
# # 返回值为 0 或 1
x = torch.Tensor(3, 3).uniform_()  # 默认是生成随机数范围是0-1
obj4 = torch.bernoulli(x)

# # 返回一个张量,每行包含从 input 相应行中定义的多项分布中抽取的 num_samples 个样本。
# # 返回的值:输入张量的索引
# # 如果参数 replacement 为 True, 则样本抽取可以重复。
weights = torch.Tensor([0, 10, 3, 0, 5, 6])
obj5 = torch.multinomial(weights, 4, replacement=True)  # 抽取四个样本

# # 返回一个张量,包含从给定参数 means,std 的离散正态分布中抽取随机数。
# # 均值 means 是一个张量,包含每个输出元素相关的正态分布的均值。
# # 标准差 std 是一个张量,包含每个输出元素相关的正态分布的标准差。
# 注意:类型为float,否则报错
obj6 = torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1., 0., -0.1))
# 与上面函数类似,所有抽取的样本共享均值。
obj7 = torch.normal(mean=0.5, std=torch.arange(1., 6.))
# 与上面函数类似,所有抽取的样本共享标准差。
obj8 = torch.normal(mean=torch.arange(1., 6.))

print("*"*20, "obj1", "*"*20, "\n", obj1, "\n", obj2, "\n", obj2.shape, "\n", obj3,  "\n")
print("*"*20, "obj4", "*"*20, "\n", x, "\n", obj4, "\n")
print("*"*20, "obj5", "*"*20, "\n", weights, "\n", "\n", obj5, "\n")
print("*"*20, "obj6", "*"*20, "\n", obj6, "\n", obj7, "\n", obj8, "\n")

 >>>output

******************** obj1 ******************** 
 0 
 tensor([0, 0, 0,  ..., 0, 0, 0], dtype=torch.uint8) 
 torch.Size([5056]) 
 tensor([[ 1.5410, -0.2934, -2.1788],
               [ 0.5684, -1.0845, -1.3986]]) 

******************** obj4 ******************** 
 tensor([[0.0223, 0.1689, 0.2939],
               [0.5185, 0.6977, 0.8000],
               [0.1610, 0.2823, 0.6816]]) 
 tensor([[0., 0., 0.],
               [1., 1., 0.],
               [1., 1., 1.]]) 

******************** obj5 ******************** 
 tensor([ 0., 10.,  3.,  0.,  5.,  6.]) 
 
 tensor([2, 1, 1, 4]) 

******************** obj6 ******************** 
 tensor([1.1494, 1.3962, 2.8287, 3.6976, 4.5753, 5.9468, 6.5029, 7.8571, 8.8628,
              9.8495]) 
 tensor([ 0.7550,  4.1085, -0.8507, -1.4321,  3.7885]) 
 tensor([1.9387, 3.1317, 2.3545, 2.2297, 5.2143]) 

***********************往期笔记 ***********************

即看即用 && 创建操作 (Creation Operations) && Pytorch官方文档总结 && 笔记 (一)_Flying Bulldog的博客-CSDN博客(1)本文涉及函数的列表(注释在代码中)torch.eyetorch.from_numpytorch.LongTensortorch.linspacetorch.logspacetorch.onestorch.randtorch.randntorch.randpermtorch.arangetorch.rangetorch.zeros(2)理解Tensor在深度学习里,Tensor实际上就是一个多维数组(multidimensional arrayhttps://blog.csdn.net/qq_54185421/article/details/124523093

即看即用 && 索引,切片,连接,换位 (Indexing, Slicing, Joining, Mutating Ops) && Pytorch官方文档总结 && 笔记 (二)_Flying Bulldog的博客-CSDN博客(1)本文涉及函数的列表(注释在代码中)torch.cat 连接张量,和stack相似torch.chunk 分块torch.gather 聚合图解PyTorch中的torch.gather函数 - 知乎torch.index_select ...https://blog.csdn.net/qq_54185421/article/details/124546042?spm=1001.2014.3001.5502

  >>>如有疑问,欢迎评论区一起探讨

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying Bulldog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值