目录
(1)本文涉及函数的列表(注释在代码中)
(2)理解正态分布、均值和标准差(mean and std)
(3)伯努利分布(别名:“零一分布”、“两点分布”)
(4)代码示例(含注释)
- torch.manual_seed # 设置种子,生成的随机数相同
- torch.initial_seed() #返回生成随机数的原始种子值
- torch.get_rng_state() # 返回随机生成器状态 torch.Size([5056])
- torch.Tensor(3, 3).uniform_() # 随机数在0-1之间
- torch.bernoulli # 从伯努利分布中抽取二元随机数(0 或者 1)
- torch.multinomial # 抽出指定的样本数,返回张量的索引
- torch.normal(mean, std) # 返回从离散正态分布中抽取的随机数
若随机变量X服从一个数学期望为μ、方差为σ**2的正态分布,记为N(μ,σ**2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
均值和标准差适用于描述对称分布。在统计工作中,平均数(均值)和标准差是描述数据资料集中趋势和离散程度的两个最重要的测度值。
标准差:观察值和均值(mean)之间的平均距离。
伯努利分布指的是对于随机变量X有:参数为p(0
分别以概率p和1-p取1和0为值。伯努利实验成功的次数服从伯努利分布,参数p是试验成功的概率。伯努利分布是一个离散型机率分布,是N=1时二项分布的特殊情况,为纪念瑞士科学家詹姆斯·伯努利(Jacob Bernoulli 或James Bernoulli)而命名。
公式:
均值:EX= p
方差:DX=p(1-p)
一个非常简单的试验是只有两个可能结果的试验,比如正面或反面,成功或失败,有缺陷或没有缺陷,病人康复或未康复。为方便起见,记这两个可能的结果为0和1。
"""
随机抽样 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
>>>如有疑问,欢迎评论区一起探讨