给定TensorA = torch.tensor([0.0316, 0.2338, 0.2338, 0.2338, 0.0316, 0.0316, 0.0860, 0.0316, 0.0860])
包含概率之和为1(我删除了一些小数,但可以安全地假设它总是和为1),我想从A
中采样一个值,其中该值本身是被采样的可能性。例如,从A
采样0.0316
的可能性是0.0316
。采样值的输出仍然应该是Tensor。
我尝试使用WeightedRandomSampler
,但它不允许选择的值是一个Tensor了,而是分离。
需要注意的是,我还想知道采样值在Tensor中的索引,也就是说,我采样0.2338
,我想知道它是TensorA
的索引1
,2
还是3
。
4条答案
按热度按时间6bc51xsx1#
通过累加权重并选择随机浮点数[0,1)的插入索引,可以实现以期望概率进行选择。示例数组 A 稍微调整为总和为1。
字符串
输出
型
这比
A.multinomial(1)
更常见的方法更快。对一个元素进行10000次采样,以检查分布是否符合概率
型
输出
型
vatpfxk52#
这个怎么样?
字符串
hgncfbus3#
从已接受的答案(Michael Szczesny)中得到的解可以扩展到覆盖具有概率的2dTensor,就像模型输出的softmax一样。只需相应地调整随机Tensor的维度。
字符串
7ivaypg94#
你可以通过这样做来欺骗一点:
字符串