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}的整数,其中Kprobs.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)
posted @ 2022-11-26 18:12  X1OO  阅读(141)  评论(0)    收藏  举报