2016-04-10 32 views
26

में सभी चर प्राप्त मैं कुछ चर इस तरह एक निश्चित दायरे के भीतर बनाई गई है:Tensorflow गुंजाइश

with tf.variable_scope("my_scope"): 
    createSomeVariables() 
    ... 

मैं तो "my_scope" में सभी चर की सूची प्राप्त करना चाहते हैं तो मैं यह एक करने के लिए पारित कर सकते हैं अनुकूलक। ऐसा करने का सही तरीका क्या है?

उत्तर

54

मुझे लगता है कि आप tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='my_scope') चाहते हैं। यह एक दायरे में सभी चर मिलेगा।

एक अनुकूलक को पास करने के लिए आप सभी वेरिएबल्स नहीं चाहते हैं जो आप केवल ट्रेन करने योग्य चर चाहते हैं। उन्हें एक डिफ़ॉल्ट संग्रह में भी रखा जाता है, जो tf.GraphKeys.TRAINABLE_VARIABLES है।

+17

'tf.GraphKeys.VARIABLES' को v0.12 में बहिष्कृत किया गया है (जैसा कि मैंने इस उत्तर से सीखा है: http://stackoverflow.com/a/40918792/1827383)। इसके बजाय 'tf.GraphKeys.GLOBAL_VARIABLES' का उपयोग करें। –

+0

क्या आपको उसमें से एक ऑप बनाना होगा और फिर इसे सत्र में चलाएं? ऐसा लगता है कि कोड अधूरा है, क्या आप इसे स्वयं निहित करने में सोचते हैं? –

+0

आपके उत्तर के लिए धन्यवाद! इस स्थिति के बारे में: दो उप-स्कोप 'tf.variable_scope (1)' और 'tf.variable_scope (2) 'एक दायरे के अंदर' tf.variable_scope (मुख्य)' हैं और मैं स्कोप्स 'दो' की दो सूचियां प्राप्त करना चाहता हूं और '2' ताकि अलग से अनुकूलित करने के लिए। – ytutow

8

उपयोगकर्ता ने सही ढंग से बताया कि आपको tf.get_collection() की आवश्यकता है। , अगर इसकी आपूर्ति:

गुंजाइश:

import tensorflow as tf 

with tf.name_scope('some_scope1'): 
    a = tf.Variable(1, 'a') 
    b = tf.Variable(2, 'b') 
    c = tf.Variable(3, 'c') 

with tf.name_scope('some_scope2'): 
    d = tf.Variable(4, 'd') 
    e = tf.Variable(5, 'e') 
    f = tf.Variable(6, 'f') 

h = tf.Variable(8, 'h') 

for i in tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='some_scope'): 
    print i # i.name if you want just a name 

सूचना है कि आप graphKeys और गुंजाइश के किसी भी प्रदान कर सकते हैं एक नियमित अभिव्यक्ति है: मैं सिर्फ एक सरल उदाहरण ऐसा करने के तरीके दे देंगे (वैकल्पिक)। परिणामस्वरूप सूची को में फ़िल्टर किया गया है केवल उन आइटमों को शामिल करें जिनके नाम विशेषता re.match का उपयोग करके मेल खाते हैं। आइटम बिना किसी नाम विशेषता के वापस लौटाया जाता है यदि कोई दायरा प्रदान किया जाता है और विकल्प या re.match का अर्थ है कि विशेष टोकन उपसर्ग द्वारा फ़िल्टर किए बिना एक दायरा।

तो यदि आप 'some_scope' पास करेंगे तो आपको 6 चर मिलेगा।

+0

क्या होगा यदि मैं फिर एक अलग संग्रह में अन्य सभी चर डालना चाहता था। उदाहरण के लिए, GLOBAL_VARIABLES में एच के माध्यम से एक होता है, और 'some_scope' f के माध्यम से समाप्त होता है, लेकिन फिर मैं एक दूसरा ऑपरेशन करना चाहता हूं जो कि मेरे अन्य संग्रह में नहीं है (रेगेक्स का उपयोग किए बिना) – reese0106