PyTorch学习笔记(三)
PyTorch学习笔记(三)
随机抽样 Random sampling
torch.manual_seed
1 | torch.manual_seed(seed) |
设定生成随机数的种子,并返回一个 torch._C.Generator 对象
参数:
- seed (int or long) – 种子
torch.initial_seed
1 | torch.initial_seed() |
返回生成随机数的原始种子值(python long)
torch.get_rng_state
1 | torch.get_rng_state |
返回随机生成器状态(ByteTensor)
torch.set_rng_state
1 | torch.set_rng_state(new_state) |
设定随机生成器状态
参数:
- new_state (torch.ByteTensor) – 期望的状态
torch.torch.bernoulli
从伯努利分布中抽取二元随机数(0 或者 1)。
输入张量须包含用于抽取上述二元随机值的概率。 因此,输入中的所有值都必须在[0,1]区间,即 $0<=input_i<=1$
输出张量的第i个元素值, 将会以输入张量的第i个概率值等于1。
返回值将会是与输入相同大小的张量,每个值为0或者1。
参数:
- input (Tensor) – 输入为伯努利分布的概率值
- out (Tensor, optional) – 输出张量(可选)
1 | >>> a = torch.Tensor(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1] |
torch.multinomial
1 | torch.multinomial(input, num_samples,replacement=False, out=None) → LongTensor |
返回一个张量,每行包含从input
相应行
中定义的多项分布中抽取的num_samples
个样本。
作用是对input的每一行做n_samples次取值,输出的张量是每一次取值时input张量对应行的下标。
注意:输入input
每行的值不需要总和为1 (这里我们用来做权重),但是必须非负且总和不能为0。
当抽取样本时,依次从左到右排列(第一个样本对应第一列)。
如果输入input
是一个向量,输出out也是一个相同长度num_samples
的向量。如果输入input
是有m
行的矩阵,输出out是形如m×num_samples
的矩阵。
如果参数replacement
为True
, 则样本抽取可以重复。否则,一个样本在每行不能被重复抽取。
参数num_samples
必须小于input
长度(即,input
的列数,如果是input是一个矩阵)。
参数:
- input (Tensor) – 包含概率值的张量
- num_samples (int) – 抽取的样本数
- replacement (bool, optional) – 布尔值,决定是否能重复抽取
- out (Tensor, optional) – 结果张量
例子:
1 | >>> weights = torch.Tensor([0, 10, 3, 0]) # create a Tensor of weights |
输入是[0,10,3,0],也就是说第0个元素和第3个元素权重都是0,在其他元素被取完之前是不会被取到的。
torch.normal()
1 | torch.normal(means, std, out=None) |
返回一个张量,包含从给定参数means
,std的离散正态分布中抽取随机数。 均值means
是一个张量,包含每个输出元素相关的正态分布的均值。 std
是一个张量,包含每个输出元素相关的正态分布的标准差。 均值和标准差的形状不须匹配,但每个张量的元素个数须相同。
参数:
- means (Tensor) – 均值
- std (Tensor) – 标准差
- out (Tensor) – 可选的输出张量
1 | torch.normal(means=torch.arange(1, 11), std=torch.arange(1, 0, -0.1)) |