2016-01-19 2 views
9

मैं एक यादृच्छिक चर उत्पन्न करने और इसे दो बार उपयोग करने की कोशिश कर रहा हूं। हालांकि, जब मैं इसे दूसरी बार उपयोग करता हूं, जनरेटर एक दूसरा यादृच्छिक चर बनाता है जो पहले के समान नहीं होता है। यहाँ कोड प्रदर्शित करने के लिए है:मैं टेंसरफ्लो में एक यादृच्छिक वेक्टर कैसे उत्पन्न करूं और इसे आगे के उपयोग के लिए बनाए रखूं?

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) 

मैं z1_op और z2_op चाहते बराबर हो। मुझे लगता है कि ऐसा इसलिए है क्योंकि random_uniform सेशन को दो बार बुलाया जाता है। यह प्राप्त करने के लिए TensorFlow (NumPy का उपयोग किए बिना) का उपयोग करने का कोई तरीका है?

(मेरे उपयोग के मामले अधिक जटिल है, लेकिन यह आसुत सवाल है।)

उत्तर

13

अपने कोड बेतरतीब ढंग से (एक नई sess.run() की प्रत्येक कॉल पर rand_var_1 के लिए मूल्य और rand_var_2 उत्पन्न होगा हालांकि जब से तुम 0 करने के लिए बीज निर्धारित करते हैं, वे एक के भीतर एक ही मूल्य है जाएगा के वर्तमान संस्करण sess.run() पर एकल कॉल)।

आप बाद में उपयोग के लिए एक यादृच्छिक रूप से जनरेट टेन्सर का मूल्य बनाए रखना चाहते हैं, तो आप यह एक tf.Variable को आवंटित करने चाहिए:

:

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) 

... तो tf.initialize_all_variables() वांछित प्रभाव पड़ेगा

# 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

अगर मेरे पास 'sess.run' का नियंत्रण नहीं है तो यह कैसे काम करेगा? मैं इसे एक अनुमानक में उपयोग कर रहा हूं, इसलिए सभी सत्र प्रबंधन छिपा हुआ है। मेरे फ़ंक्शन 'g() को' f (t) 'दो बार कॉल करने की आवश्यकता है, उसी' t' के साथ। हालांकि, 'g()' के लिए प्रत्येक कॉल पर, मुझे एक अलग 'टी' चाहिए। असल में, मैं अपने कार्य की पूरी अवधि 'g()' के लिए 'tf.random_uniform()' के परिणाम को कैश करना चाहता हूं। –

0

आपका प्रश्न, this question रूप में एक ही मुद्दा है में है कि यदि आप random_uniform फोन दो बार आप दो परिणाम प्राप्त कर सकेंगे, और इस तरह के रूप में आप अपने दूसरे चर को पहले के मान पर सेट करने की आवश्यकता है। इसका मतलब है कि, यह मानते हुए आप rand_var_1 बाद में नहीं बदल रहे हैं, तो आप ऐसा कर सकते हैं: ही कहा

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

लेकिन,, यदि आप z1 और z2 चाहते बराबर हो, क्यों सभी को अलग-अलग वैरिएबल है? क्यों नहीं:

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

मुझे दो परिणाम मिलेंगे, लेकिन चूंकि मैं दोनों बीज को शून्य पर सेट कर रहा हूं, इसलिए दो परिणाम समान होंगे। दूसरे मान को पहले सेट करना मेरे लिए काम नहीं करेगा क्योंकि मेरे वास्तविक उपयोग मामले में, दूसरा मान यादृच्छिक चर का एक अलग कार्य है। मैं अपने भ्रामक उदाहरण के लिए क्षमा चाहता हूं। और इसी तरह, मेरे कोड में 'z1_op' और 'z2_op' अलग हैं। मैं बस उन्हें यह दिखाने के लिए उपयोग कर रहा था कि प्रत्येक चरण में अलग-अलग यादृच्छिक संख्याओं का उपयोग किया जा रहा है। – Distopia

संबंधित मुद्दे

 संबंधित मुद्दे