2017-04-09 2 views
6

Ich bin auf der Suche nach etwas ähnlich wie numpy.random.choice(range(3),replacement=False,size=2,p=[0.1,0.2,0.7])
in TensorFlow.Sampling ohne Ersatz von einer gegebenen ungleichmäßigen Verteilung in TensorFlow

Die nächste Op scheint es zu tf.multinomial(tf.log(p)) sein, die logits als Eingabe nimmt, aber es kann nicht ohne Ersatz probieren. Gibt es eine andere Möglichkeit, Stichproben aus einer nicht gleichmäßigen Verteilung in TensorFlow zu erstellen?

Danke.

Antwort

2

Sie könnten nur tf.py_func verwenden numpy.random.choice zu wickeln und sie als TensorFlow op zur Verfügung zu stellen:

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]})) 

Sie die numpy Samen wie üblich angeben:

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]})) 

drucken würde:

[ 2. 0.] 
[ 2. 1.] 
[ 0. 1.] 
[ 2. 0.] 
[ 2. 1.] 
[ 0. 1.] 
[ 2. 0.] 
Verwandte Themen