随机抽样 Random sampling
torch.manual_seed
torch.manual_seed(seed)
设定生成随机数的种子,并返回一个 torch._C.Generator 对象.
参数: seed (int or long) – 种子.
torch.initial_seed
torch.initial_seed()
返回生成随机数的原始种子值(python long)。
torch.get_rng_state
torch.get_rng_state()[source]
返回随机生成器状态(ByteTensor)
torch.set_rng_state
torch.set_rng_state(new_state)[source]
设定随机生成器状态 参数: new_state (torch.ByteTensor) – 期望的状态
torch.default_generator
torch.default_generator = <torch._C.Generator object>
torch.bernoulli
torch.bernoulli(input, out=None) → Tensor
从伯努利分布中抽取二元随机数(0 或者 1)。
输入张量须包含用于抽取上述二元随机值的概率。 因此,输入中的所有值都必须在[0,1]区间,即 ( 0<=input_i<=1 )
输出张量的第i个元素值, 将会以输入张量的第i个概率值等于1。
返回值将会是与输入相同大小的张量,每个值为0或者1 参数:
- input (Tensor) – 输入为伯努利分布的概率值
- out (Tensor, optional) – 输出张量(可选)
例子:
>>> a = torch.Tensor(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1]>>> a 0.7544 0.8140 0.9842 0.5282 0.0595 0.6445 0.1925 0.9553 0.9732[torch.FloatTensor of size 3x3]>>> torch.bernoulli(a) 1 1 1 0 0 1 0 1 1[torch.FloatTensor of size 3x3]>>> a = torch.ones(3, 3) # probability of drawing "1" is 1>>> torch.bernoulli(a) 1 1 1 1 1 1 1 1 1[torch.FloatTensor of size 3x3]>>> a = torch.zeros(3, 3) # probability of drawing "1" is 0>>> torch.bernoulli(a) 0 0 0 0 0 0 0 0 0[torch.FloatTensor of size 3x3]
torch.multinomial
torch.multinomial(input, num_samples,replacement=False, out=None) → LongTensor
返回一个张量,每行包含从input相应行中定义的多项分布中抽取的num_samples个样本。
[注意]:输入input每行的值不需要总和为1 (这里我们用来做权重),但是必须非负且总和不能为0。
当抽取样本时,依次从左到右排列(第一个样本对应第一列)。
如果输入input是一个向量,输出out也是一个相同长度num_samples的向量。如果输入input是有 (m )行的矩阵,输出out是形如( m \times n )的矩阵。
如果参数replacement 为 True, 则样本抽取可以重复。否则,一个样本在每行不能被重复抽取。
参数num_samples必须小于input长度(即,input的列数,如果是input是一个矩阵)。
参数:
- input (Tensor) – 包含概率值的张量
- num_samples (int) – 抽取的样本数
- replacement (bool, optional) – 布尔值,决定是否能重复抽取
- out (Tensor, optional) – 结果张量
例子:
>>> weights = torch.Tensor([0, 10, 3, 0]) # create a Tensor of weights>>> torch.multinomial(weights, 4) 1 2 0 0[torch.LongTensor of size 4]>>> torch.multinomial(weights, 4, replacement=True) 1 2 1 2[torch.LongTensor of size 4]
torch.normal()
torch.normal(means, std, out=None)
返回一个张量,包含从给定参数means,std的离散正态分布中抽取随机数。 均值means是一个张量,包含每个输出元素相关的正态分布的均值。 std是一个张量,包含每个输出元素相关的正态分布的标准差。 均值和标准差的形状不须匹配,但每个张量的元素个数须相同。
参数:
- means (Tensor) – 均值
- std (Tensor) – 标准差
- out (Tensor) – 可选的输出张量
torch.normal(means=torch.arange(1, 11), std=torch.arange(1, 0, -0.1)) 1.5104 1.6955 2.4895 4.9185 4.9895 6.9155 7.3683 8.1836 8.7164 9.8916[torch.FloatTensor of size 10]
torch.normal(mean=0.0, std, out=None)
与上面函数类似,所有抽取的样本共享均值。
参数:
- means (Tensor,optional) – 所有分布均值
- std (Tensor) – 每个元素的标准差
- out (Tensor) – 可选的输出张量
例子:
>>> torch.normal(mean=0.5, std=torch.arange(1, 6)) 0.5723 0.0871 -0.3783 -2.5689 10.7893[torch.FloatTensor of size 5]
torch.normal(means, std=1.0, out=None)
与上面函数类似,所有抽取的样本共享标准差。
参数:
- means (Tensor) – 每个元素的均值
- std (float, optional) – 所有分布的标准差
- out (Tensor) – 可选的输出张量
例子:
>>> torch.normal(means=torch.arange(1, 6)) 1.1681 2.8884 3.7718 2.5616 4.2500[torch.FloatTensor of size 5]