TNM*_*TNM 8 random choice multinomial tensorflow
我正在寻找类似于numpy.random.choice(range(3),replacement=False,size=2,p=[0.1,0.2,0.7])
TensorFlow的东西.
最接近Op
它似乎是tf.multinomial(tf.log(p))
将logits作为输入,但它不能在没有替换的情况下进行采样.在TensorFlow中,是否还有其他方法可以从非均匀分布中进行采样?
谢谢.
您只需使用tf.py_func
包装numpy.random.choice
并将其作为 TensorFlow 操作即可使用:
a = tf.placeholder(tf.float32)
size = tf.placeholder(tf.int32)
replace = tf.placeholder(tf.bool)
p = tf.placeholder(tf.float32)
y = tf.py_func(np.random.choice, [a, size, replace, p], tf.float32)
with tf.Session() as sess:
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
Run Code Online (Sandbox Code Playgroud)
您可以像往常一样指定 numpy 种子:
np.random.seed(1)
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
np.random.seed(1)
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
np.random.seed(1)
print(sess.run(y, {a: range(3), size: 2, replace:False, p:[0.1,0.2,0.7]}))
Run Code Online (Sandbox Code Playgroud)
会打印:
[ 2. 0.]
[ 2. 1.]
[ 0. 1.]
[ 2. 0.]
[ 2. 1.]
[ 0. 1.]
[ 2. 0.]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1193 次 |
最近记录: |