2016-06-12 8 views
5

मेरा मानना ​​है कि मुझे समझने में कठिनाई हो रही है कि ग्राफ टेंसोर्फलो में कैसे काम करते हैं और उन्हें कैसे पहुंचाते हैं। मेरा अंतर्ज्ञान यह है कि 'ग्राफ़ के साथ' रेखाएं एक ही इकाई के रूप में ग्राफ बनाती हैं। इसलिए, मैंने एक कक्षा बनाने का निर्णय लिया जो तत्काल होने पर ग्राफ का निर्माण करेगा और ग्राफ के रूप में चलने वाला एक फ़ंक्शन होगा;टेन्सफोर्लो: कक्षा में एक ग्राफ बनाना और इसे चलाने के लिए ouside

class Graph(object): 

    #To build the graph when instantiated 
    def __init__(self, parameters): 
     self.graph = tf.Graph() 
     with self.graph.as_default(): 
      ... 
      prediction = ... 
      cost  = ... 
      optimizer = ... 
      ... 
    # To launch the graph 
    def launchG(self, inputs): 
     with tf.Session(graph=self.graph) as sess: 
      ... 
      sess.run(optimizer, feed_dict) 
      loss = sess.run(cost, feed_dict) 
      ... 
     return variables 

अगले चरण हैं, जो मानकों को इकट्ठा करेंगे वर्ग के लिए पारित करने के लिए, ग्राफ के निर्माण के लिए और फिर इसे चलाने के लिए एक मुख्य फ़ाइल बनाने के लिए कर रहे हैं;

#Main file 
... 
parameters_dict = { 'n_input': 28, 'learnRate': 0.001, ... } 

#Building graph 
G = Graph(parameters_dict) 
P = G.launchG(Input) 
... 

यह मेरे लिए बहुत ही सुरुचिपूर्ण है, लेकिन यह काफी काम नहीं करता है (जाहिर है)। दरअसल, ऐसा लगता है कि लॉन्च जी कार्यों में ग्राफ़ में परिभाषित नोड्स तक पहुंच नहीं है, जो मुझे त्रुटि देता है;

---> 26 sess.run(optimizer, feed_dict) 

NameError: name 'optimizer' is not defined 

शायद यह मेरी अजगर (और tensorflow) समझ है कि बहुत सीमित है, लेकिन मैं अजीब धारणा थी कि ग्राफ (G) बनाया के साथ, यह ग्राफ के साथ सत्र चल रहा है एक तर्क पहुँच देना चाहिए के रूप में इसमें नोड्स के लिए, मुझे स्पष्ट पहुंच देने की आवश्यकता के बिना।

कोई ज्ञान?

उत्तर

7

नोड्स prediction, cost, और optimizer विधि __init__ में बनाए गए स्थानीय चर रहे हैं, वे विधि launchG में पहुँचा नहीं जा सकता।

सबसे आसान फिक्स उन्हें अपने वर्ग Graph की विशेषताओं के रूप में घोषित करने के लिए होगा:

class Graph(object): 

    #To build the graph when instantiated 
    def __init__(self, parameters): 
     self.graph = tf.Graph() 
     with self.graph.as_default(): 
      ... 
      self.prediction = ... 
      self.cost  = ... 
      self.optimizer = ... 
      ... 
    # To launch the graph 
    def launchG(self, inputs): 
     with tf.Session(graph=self.graph) as sess: 
      ... 
      sess.run(self.optimizer, feed_dict) 
      loss = sess.run(self.cost, feed_dict) 
      ... 
     return variables 

तुम भी graph.get_tensor_by_name और graph.get_operation_by_name के साथ अपने सही नाम का उपयोग करते हुए ग्राफ के नोड्स प्राप्त कर सकते हैं।

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