- 版本、环境信息:
1)PaddlePaddle版本:1.8.2 cuda7.6
2)系统环境:win10
3)Python版本号: 3.7
with fluid.dygraph.guard():
prob = np.array([[0.1, 0.5, 0.3,0.1],[0.1, 0.5, 0.3,0.1], [0.1, 0.5, 0.3,0.1],[0.1, 0.5, 0.3,0.1]])
prob = fluid.dygraph.base.to_variable(prob)
out = fluid.layers.sampling_id(prob,min=0,max =2,seed=10)
_out = out.numpy()
print(_out)
ii = 5
以上代码输出[3 3 3 3], 但根据理解,batch_size为4,每个分布有4个项,可选[0,1,2,3],再加上min=0,max =2,则最后每个分布的可选项应该在区间[0,2]间,那为何结果是[3 3 3 3]呢?
另,若希望从某个分布取n个样本(而不是1个)要怎么写呢,若没有现成的函数,希望能参考pytorch的multinomial函数仿写一个。
2条答案
按热度按时间gz5pxeao1#
Paddle/paddle/fluid/operators/sampling_id_op.h
Line 59 in 2b61db0
| | int idx = width - 1; |
感谢您的问题,可以看一下相关的实现,可能sampling_id的理解有一些偏差,在上面这个链接的代码里面是一个batch里面的每一行都先随机一个(min,max)之间的数,然后减去这一行从头开始的每一个数,一直到小于0的时候,记录当前的index作为结果返回。如果一整行都减去,仍然大于0,就返回最后一个index 在您这个例子中也就是3。
这就是为什么出现[3,3,3,3]
6ju8rftf2#
@wangjiawei04 您好,感谢回复。 那么若要实现我提问中所述的批量多个离散分布采样的话,是否暂时paddlepaddle中并没有现成的,只能用numpy来完成了?