2015-11-11 5 views
15

कुछ स्थानों में, मैंने सिंटैक्स देखा, जहां चर नामों के साथ शुरू किए जाते हैं, कभी-कभी नामों के बिना।हम टेन्सफोर्लो में चर का नाम क्यों देते हैं?

# With name 
var = tf.Variable(0, name="counter") 

# Without 
one = tf.constant(1) 

चर var"counter" नामकरण की बात क्या है: उदाहरण के लिए?

उत्तर

27

name पैरामीटर वैकल्पिक है (आप चर या स्थिरांक बना सकते हैं या इसके बिना), और आपके प्रोग्राम में उपयोग किए जाने वाले चर पर निर्भर नहीं है। नाम कुछ स्थानों में सहायक हो सकते हैं:

जब आप अपने चर को सहेजना या पुनर्स्थापित करना चाहते हैं (आप गणना के बाद save them to a binary file कर सकते हैं)। docs से:

By default, it uses the value of the Variable.name property for each variable

matrix_1 = tf.Variable([[1, 2], [2, 3]], name="v1") 
matrix_2 = tf.Variable([[3, 4], [5, 6]], name="v2") 
init = tf.initialize_all_variables() 

saver = tf.train.Saver() 

sess = tf.Session() 
sess.run(init) 
save_path = saver.save(sess, "/model.ckpt") 
sess.close() 

बहरहाल आप चर matrix_1, matrix_2 वे कर रहे हैं है बचाता है v1, v2 फ़ाइल में के रूप में।

टेंसरबोर्ड में नामों का नाम अच्छी तरह से किनारों के नाम दिखाने के लिए उपयोग किया जाता है। तुम भी group them by using the same scope कर सकते हैं:

import tensorflow as tf 

with tf.name_scope('hidden') as scope: 
    a = tf.constant(5, name='alpha') 
    W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights') 
    b = tf.Variable(tf.zeros([1]), name='biases') 
7

आप दो समानांतर ब्रह्मांडों के रूप में अजगर नाम स्थान और TensorFlow नाम स्थान कल्पना कर सकते हैं। टेंसरफ्लो स्पेस में नाम वास्तव में किसी भी टेंसरफ्लो वैरिएबल से संबंधित "असली" विशेषताएं हैं, जबकि पायथन स्पेस में नाम केवल आपकी स्क्रिप्ट के इस रन के दौरान टेंसरफ्लो वैरिएबल को इंगित करने वाले अस्थायी पॉइंटर्स हैं। यही कारण है कि जब चर को सहेजना और बहाल करना, केवल तन्योरफ्लो नामों का उपयोग किया जाता है, क्योंकि स्क्रिप्ट समाप्त होने के बाद पाइथन नामस्थान अब मौजूद नहीं है, लेकिन आपकी सहेजी गई फ़ाइलों में टेन्सफ़ोर्लो नामस्थान अभी भी मौजूद है।

0

एक और उपयोग के मामले हो सकता है:

निम्नलिखित कोड और इसके उत्पादन

def f(): 
a = tf.Variable(np.random.normal(), dtype = tf.float32, name = 'test123') 

def run123(): 
    f() 
    init = tf.global_variables_initializer() 
    with tf.Session() as sess123: 
     sess123.run(init) 
     print(sess123.run(fetches = ['test123:0'])) 
     print(sess123.run(fetches = [a])) 

run123() 

उत्पादन पर विचार करें:

[0.१,०१,०८,७९९]

NameError Traceback (सबसे हाल कॉल पिछले) में() 10 प्रिंट (sess123.run (fetches = [a])) ---> 12 run123()

run123 में

() 8 sess123.run (init) 9 प्रिंट (sess123.run (= को हासिल करेगा [ 'test123: 0'])) ---> 10 प्रिंट (sess123.run (को हासिल करेगा = [एक])) 12 run123()

NameError: नाम

'एक' परिभाषित नहीं है 'एक' के रूप में च के दायरे में परिभाषित किया गया है,(), रनपॉ3() में इसके दायरे से बाहर उपलब्ध नहीं है, लेकिन डिफ़ॉल्ट ग्राफ को उन्हें कुछ के साथ संदर्भित करना है, ताकि डिफ़ॉल्ट ग्राफ को विभिन्न क्षेत्रों में आवश्यकतानुसार संदर्भित किया जा सके और जब यह 'ना' मुझे आसान लगता है

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