NumPy和Torch的采样函数
Torch
torch.multinomial
torch.multinomial(input, num_samples, replacement=False, *, generator=None, out=None) → LongTensor
点击查看
参数:
- input(Tensor) -包含概率的输入张量
- num_samples(int) -要抽取的样本数
- replacement(bool,可选的) -是否用替换绘制
关键字参数:
- generator(torch.Generator, 可选的) -用于采样的伪随机数发生器
- out(Tensor,可选的) -输出张量。
返回一个张量,其中每行包含从位于张量 input 的相应行中的多项概率分布中采样的 num_samples 索引。
注意
input 的行不需要总和为 1(在这种情况下,我们将值用作权重),但必须是非负的、有限的并且总和非零。
索引根据每个采样的时间从左到右排序(第一个样本放在第一列)。
如果 input 是向量,则 out 是大小为 num_samples 的向量。
如果 input 是具有 m 行的矩阵,则 out 是形状为 的矩阵。
如果替换是 True ,则使用替换抽取样本。
如果不是,它们将在不替换的情况下绘制,这意味着当为一行绘制样本索引时,不能为该行再次绘制它。
在不替换的情况下绘制时,num_samples 必须小于 input 中非零元素的数量(如果是矩阵,则为 input 每行中非零元素的最小数量)。
Example
>>> 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])
torch.distributions.categorical.Categorical
class torch.distributions.categorical.Categorical(probs=None, logits=None, validate_args=None)
点击查看
-probs(Tensor) -事件概率 -logits(Tensor) -事件日志概率(未标准化)创建由 probs 或 logits(但不是两者)参数化的分类分布。
注意
它相当于torch.multinomial() 从中采样的分布。
样本是来自{0,…,K−1}的整数,其中K是probs.size(-1)。
如果 probs 是一维长度为 K ,则每个元素都是在该索引处对类进行采样的相对概率。
如果 probs 是 N 维的,则前 N-1 维被视为一批相对概率向量。
probs 参数必须是非负的、有限的并且有一个非零和,并且它将被规范化为沿最后一个维度的总和为 1。 probs 将返回此标准化值。 logits 参数将被解释为非标准化的日志概率,因此可以是任何实数。它同样会被归一化,以便沿最后一个维度产生的概率总和为 1。 logits 将返回此标准化值。
>>> m = Categorical(torch.tensor([ 0.25, 0.25, 0.25, 0.25 ]))
>>> m.sample() # equal probability of 0, 1, 2, 3
tensor(3)

浙公网安备 33010602011771号