2016-06-12 17 views
5

Grafiklerin tensorflow'da nasıl çalıştığını ve bunlara nasıl erişileceğini anlamakta çok zorlanıyorum. Sezgim, 'grafikle' altındaki çizgilerin grafiği tek bir varlık olarak oluşturacak olmasıdır. Bu nedenle, örneklendiğinde bir grafik oluşturacak ve aşağıdaki gibi grafiği çalıştıracak bir işleve sahip olacak bir sınıf oluşturmaya karar verdim;Tensorflow: Bir sınıfta grafik oluşturma ve onu çalıştırma

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 

sonraki adımlar çalıştırmak sonra grafiği oluşturmak için, sınıfa iletilecek parametreleri monte etmek ve bir ana dosya oluşturmak için vardır;

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

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

Bu benim için çok zariftir, ancak tam olarak çalışmıyor (açıkçası). Gerçekten de, launchG işlevlerinin grafikte tanımlanan düğümlere erişememesi gibi görünüyor;

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

NameError: name 'optimizer' is not defined 

Belki çok sınırlıdır benim piton (ve tensorflow) anlayış, ama yaratılan grafikte (G) ile, bu grafikle oturumu çalıştıran bir argüman erişim vermek gerektiği gibi garip izlenime kapıldım açık erişim vermemi gerektirmeden, içindeki düğümlere.

Herhangi bir aydınlanma?

cevap

7

düğümleri prediction, cost ve optimizer yöntem __init__ oluşturulan lokal değişkenler, bu yöntem launchG içinde erişilemez.

en kolay düzeltme sınıfınızın Graph nitelikleri olarak bunları yayınlama olacaktır:

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 

Ayrıca graph.get_tensor_by_name ve graph.get_operation_by_name ile tam adını kullanarak grafiğin düğümleri alabilirsiniz.