2016-01-19 3 views
9

Rasgele bir değişken oluşturmaya çalışıyorum ve iki kez kullanıyorum. Bununla birlikte, ikinci kez kullandığımda, jeneratör ilk ile aynı olmayan ikinci bir rastgele değişken oluşturur. İşte kod göstermektir:TensorFlow'da rastgele bir vektör nasıl oluşturabilir ve daha fazla kullanım için bunu koruyabilirim?

import numpy as np 
import tensorflow as tf 

# A random variable 
rand_var_1 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0) 
rand_var_2 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0) 

#Op1 
z1 = tf.add(rand_var_1,rand_var_2) 

#Op2 
z2 = tf.add(rand_var_1,rand_var_2) 

init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init) 
    z1_op = sess.run(z1) 
    z2_op = sess.run(z2) 
    print(z1_op,z2_op) 

ben eşit olacak şekilde z1_op ve z2_op istiyorum. Bunun nedeni, random_uniform op'un iki kez çağrılmasıdır. Bunu elde etmek için TensorFlow'u (NumPy kullanmadan) kullanmanın bir yolu var mı?

(My kullanım durumu daha karmaşıktır, ancak bu distile sorudur.) Eğer random_uniform ararsanız iki kez iki sonuç verecektir içinde

cevap

13

0 olarak tohum ayarlamak beri, onlar içinde aynı değere sahip olacaktır rağmen rastgele (sess.run() yapılan her çağrı üzerine yeni rand_var_1 için değer ve rand_var_2 üretecektir kodunuzun geçerli sürümü sess.run() numaralı telefonu arayın. daha sonra kullanmak üzere rastgele oluşturulmuş tensör değerini korumak istiyorsanız

, sen tf.Variable bir aktarmayı unutmayın:

:

rand_var_1 = tf.Variable(tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0)) 
rand_var_2 = tf.Variable(tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0)) 

# Or, alternatively: 
rand_var_1 = tf.Variable(tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0)) 
rand_var_2 = tf.Variable(rand_var_1.initialized_value()) 

# Or, alternatively: 
rand_t = tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0) 
rand_var_1 = tf.Variable(rand_t) 
rand_var_2 = tf.Variable(rand_t) 

... sonra tf.initialize_all_variables() istenen etkisi olacaktır

# Op 1 
z1 = tf.add(rand_var_1, rand_var_2) 

# Op 2 
z2 = tf.add(rand_var_1, rand_var_2) 

init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init)  # Random numbers generated here and cached. 
    z1_op = sess.run(z1) # Reuses cached values for rand_var_1, rand_var_2. 
    z2_op = sess.run(z2) # Reuses cached values for rand_var_1, rand_var_2. 
    print(z1_op, z2_op) # Will print two identical vectors. 
+0

Eğer 'sess.run' kontrolünü elimde bulundurmazsam bu nasıl çalışır? Bunu bir Tahmin Edicisinde kullanıyorum, böylece tüm oturum yönetimi gizlendi. Benim fonksiyonum 'g()' 'f' (t)' işlevini iki kez, aynı 't' ile çağırmalıdır. Ancak, g() 'ye yapılan her çağrıda farklı bir t istiyorum. Temel olarak, 'g()' işlevimin tüm süresi boyunca 'tf.random_uniform()' sonucunu önbelleğe almak istiyorum. –

0

Sorunuz, this question aynı sorunu var ve bu gibi ikinci değişkeninizi ilk değerine ayarlamanız gerekir. Yani sonradan rand_var_1 değişen olmadığı varsayılarak, yani, bunu yapabilirsiniz: eşit olacak şekilde z1 ve z2 istiyorsanız, ki burada sözü

rand_var_1 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0) 
rand_var_2 = rand_var_1 

Fakat neden hiç ayrı değişkenler var? Neden yapmıyorsun:

import numpy as np 
import tensorflow as tf 

# A random variable 
rand_var = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0) 
op = tf.add(rand_var,rand_var) 

init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init) 
    z1_op = sess.run(op) 
    z2_op = sess.run(op) 
    print(z1_op,z2_op) 
+0

İki sonuç alacağım, ancak her iki tohumun da sıfıra ayarlandığından, iki sonuç aynı olmalıdır. İkinci değeri ilk olarak ayarlamak benim için işe yaramaz çünkü benim gerçek kullanım durumumda, ikinci değer rastgele değişkenin farklı bir işlevidir. Yanıltıcı örneğim için özür dilerim. Ve benzer şekilde, 'z1_op' ve 'z2_op' kodumda farklıdır. Her adımda farklı rastgele sayıların kullanıldığını göstermek için onları burada kullandım. – Distopia

İlgili konular