给定包含伯努利分布均值的1D张量,如何用给定的方法对相应的1D张量进行采样?
TensorFlow似乎只实现了random_normal
和random_uniform
个功能。我可以使用复杂的东西:
tf.ceil(tf.sub(tf.random_uniform((1, means.get_shape()[0])),means))
但是ceil
函数没有在TensorFlow中定义渐变。
答案 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))))