在TensorFlow中采样Bernoulli随机变量

时间:2016-02-18 16:52:01

标签: tensorflow

给定包含伯努利分布均值的1D张量,如何用给定的方法对相应的1D张量进行采样?

TensorFlow似乎只实现了random_normalrandom_uniform个功能。我可以使用复杂的东西:

tf.ceil(tf.sub(tf.random_uniform((1, means.get_shape()[0])),means))

但是ceil函数没有在TensorFlow中定义渐变。

3 个答案:

答案 0 :(得分:6)

您可以使用means = tf.constant([.3,.8]) a = tf.select(tf.random_uniform([1, 2])- means > 0.5, tf.ones([1,2]), tf.zeros([1,2])) with tf.Session(''): a.eval() ,这是可区分的。

{{1}}

答案 1 :(得分:3)

自TFr1.0起,tf.select被弃用,转而使用tf.where。此外,@ keveman给出的答案应该将均匀随机抽样与< 0,都不是> 0.5也不是> 0:

    means = tf.constant([.3,.8])
    sample = tf.where(tf.random_uniform([1, 2]) - means < 0, 
      tf.ones([1,2]), tf.zeros([1,2]))
    with tf.Session(''): sample.eval()

答案 2 :(得分:0)

I've seen以下技巧也是伯努利分布的一种采样方法:

tf.nn.relu(tf.sign(means - tf.random_uniform(tf.shape(means))))