创建并返回一个生成器对象,该对象管理生成伪随机数的算法的状态。在许多就地随机抽样函数中用作关键字参数。
g_cpu = torch.Generator()
g_cpu.get_state()
g_cpu = torch.Generator()
g_cpu.initial_seed()
g_cpu = torch.Generator()
g_cpu.manual_seed(2147483647)
将用于生成随机数的种子设置为非确定性随机数。返回用于为RNG设定种子的64位数字。
设置生成随机数的种子。返回torch.Generator对象。
以torch.ByteTensor
的形式返回随机数生成器状态。
从伯努利分布中绘制二进制随机数(0或1)。
输入张量应该是包含用于绘制二进制随机数的概率的张量。因此,输入中的所有值都必须在该范围内: 0 < = i n p u t i < = 1 0 <= input_i <= 1 0<=inputi<=1
返回的张量只有0或1的值,并且与输入的形状相同。
输出可以是整型dtype
,但输入必须是浮点型dtype
。
>>> a = torch.empty(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1]
>>> a
tensor([[ 0.1737, 0.0950, 0.3609],
[ 0.7148, 0.0289, 0.2676],
[ 0.9456, 0.8937, 0.7202]])
>>> torch.bernoulli(a)
tensor([[ 1., 0., 0.],
[ 0., 0., 0.],
[ 1., 1., 1.]])
>>> a = torch.ones(3, 3) # probability of drawing "1" is 1
>>> torch.bernoulli(a)
tensor([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> a = torch.zeros(3, 3) # probability of drawing "1" is 0
>>> torch.bernoulli(a)
tensor([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
以输入的张量作为权重进行多分布采样
输入行不需要求和为1(在这种情况下,我们使用值作为权重),但必须是非负的、有限的且具有非零和。
根据每个索引的采样时间从左到右排序(第一个样本放在第一列)。
对input的每一行进行num_samples次取值,输出为每次取值的索引。
input每一行中的元素是该索引被采样的权重。如果元素为0,那么其他位置被采样完之前,这个位置都不会被采样。
replacement=False为不放回采样,True为有放回采样。
>>> weights = torch.tensor([0, 10, 3, 0], dtype=torch.float) # create a tensor of weights
>>> torch.multinomial(weights, 2)
tensor([1, 2])
>>> torch.multinomial(weights, 4) # ERROR!
RuntimeError: invalid argument 2: invalid multinomial distribution (with replacement=False,
not enough non-negative category to sample) at ../aten/src/TH/generic/THTensorRandom.cpp:320
>>> torch.multinomial(weights, 4, replacement=True)
tensor([ 2, 1, 1, 1])
该函数返回从单独的正态分布中提取的随机数的张量,该正态分布的均值是mean,标准差是std。
torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
torch.normal(mean=0.5, std=torch.arange(1., 6.))
torch.normal(mean=torch.arange(1., 6.))
torch.normal(2, 3, size=(1, 4))
rates = torch.rand(4, 4) * 5 # rate parameter between 0 and 5
torch.poisson(rates)
返回一个张量,由区间[0,1]上均匀分布的随机数填充。
张量的形状由变量参数size定义。
torch.rand(4)
torch.rand(2, 3)
返回与输入大小相同的张量,该张量由区间[0,1)上均匀分布的随机数填充。
torch.rand_like(input)
等效于torch.rand(input.size(),dtype=input.dtype,layout=input.layout,device=input.device)
。
返回一个张量,该张量由在低(含)和高(不含)之间均匀生成的随机整数填充。
torch.randint(3, 5, (3,))
torch.randint(10, (2, 2))
torch.randint(3, 10, (2, 2))
返回一个与张量输入形状相同的张量,该张量填充有在低(含)和高(不含)之间均匀生成的随机整数。
返回由平均值为0和方差为1的正态分布(也称为标准正态分布)中的随机数填充的张量。
torch.randperm(4)
返回一个与输入大小相同的张量,该张量由均值为0、方差为1的正态分布中的随机数填充。torch.randn_like(input)
等同于torch.randn(input.size(),dtype=input.dtype,layout=input.layout,device=input.device)
。
返回从0到n-1的整数的随机排列。
torch.randperm(4)
在张量上还定义了更多的就地随机抽样函数。点击查看他们的文档
torch.Tensor.bernoulli_()
-torch.bernoulli()的原地版本>>> a = torch.empty(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1]
>>> a
tensor([[ 0.1737, 0.0950, 0.3609],
[ 0.7148, 0.0289, 0.2676],
[ 0.9456, 0.8937, 0.7202]])
>>> torch.bernoulli(a)
tensor([[ 1., 0., 0.],
[ 0., 0., 0.],
[ 1., 1., 1.]])
>>> a = torch.ones(3, 3) # probability of drawing "1" is 1
>>> torch.bernoulli(a)
tensor([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> a = torch.zeros(3, 3) # probability of drawing "1" is 0
>>> torch.bernoulli(a)
tensor([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> a = torch.ones(3, 3)
>>> torch.Tensor.cauchy_(a)
tensor([[-4.5374, 0.3726, 0.4947],
[ 0.4111, 0.9167, 0.7214],
[ 1.0533, -9.2247, 0.7620]])
torch.Tensor.exponential_()
-从指数分布中抽取的数字a = torch.ones(3, 3)
c = torch.Tensor.exponential_(a)
tensor([[0.3893, 0.0695, 0.6871],
[0.0591, 0.3779, 0.9806],
[0.2019, 0.2062, 0.9049]])
torch.Tensor.geometric_()
- 从几何分布中绘制的元素a = torch.ones(3, 3)
c = torch.Tensor.geometric_(a)
tensor([[ 2.8285, 1.6213, 0.6245],
[ 3.0095, 153.3951, 0.2924],
[ 2.7817, 3.9648, 0.5211]])
torch.Tensor.log_normal_()
- 样本来自对数正态分布a = torch.ones(3, 3)
c = torch.Tensor.log_normal_(a)
tensor([[ 2.8285, 1.6213, 0.6245],
[ 3.0095, 153.3951, 0.2924],
[ 2.7817, 3.9648, 0.5211]])
torch.Tensor.normal_()
- torch.normal()的原地版本a = torch.ones(3, 3)
c = torch.Tensor.normal_(a)
tensor([[ 2.8285, 1.6213, 0.6245],
[ 3.0095, 153.3951, 0.2924],
[ 2.7817, 3.9648, 0.5211]])
torch.Tensor.random_()
- 从离散均匀分布中抽样的数用从 [from, to - 1]
上的离散均匀分布采样的数字填充自张量。如果未指定,则值通常仅受 self 张量数据类型的限制。但是,对于浮点类型,如果未指定,范围将为 [0, 2^mantissa]
以确保每个值都是可表示的。例如 torch.tensor(1, dtype=torch.double).random () 将在 [0, 2^53]
内统一。
a = torch.ones(3, 3)
c = torch.Tensor.random_(a)
torch.Tensor.uniform_()
- 连续均匀分布的抽样数a = torch.ones(3, 3)
c = torch.Tensor.uniform_(a)
tensor([[0.8895, 0.0307, 0.2593],
[0.3435, 0.7643, 0.0648],
[0.9184, 0.4584, 0.8865]])
torch.quasrandom.sobolengine
是一个用于生成(打乱的)Sobol序列的引擎。Sobol序列是低差异准随机序列的一个例子。
这个Sobol序列引擎的实现能够对最大维数为21201的序列进行采样。它使用来自https://web.maths.unsw.edu.au/~fkuo/sobol/使用搜索标准D(6)获得,直到维度21201。这是作者推荐的选择。
draw
函数从SOBOL序列中绘制n个点的序列。请注意,样品取决于先前的样品。结果的大小是(n,dimension).soboleng = torch.quasirandom.SobolEngine(dimension=5)
b = soboleng.draw(3)
tensor([[0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
[0.5000, 0.5000, 0.5000, 0.5000, 0.5000],
[0.7500, 0.2500, 0.2500, 0.2500, 0.7500]])