2016-11-30 4 views
0

Ich benutze derzeit Tensorflow für eine tiefe Lernanwendung, die ich bei der Arbeit entwickle. Ich kann nicht in Einzelheiten über die Anwendung gehen, aber der Code ist so etwas wie eine angepasste Word2Vec, aber die Kosten für jede Wort-Vektor-Darstellung muss individuell berechnet werden. :Tensorflow Graph wird zu groß

def cost_function(word_vector, other_word_vectors): 
    # cost for a single training example needs to be computed 
    # separately, and it depends on the vector representations 
    # of some other words, depending on the training instance 
    return tf.nn.tanh(some_mathematical_computation) 

Das Problem bei diesem Ansatz ist, dass die Diagrammgröße so viel Luft zu sprengen neigt, dass die compute_gradients Betrieb viel Zeit in Anspruch nimmt. Nicht nur das, die Zeit bis compute_gradients nimmt linear mit der Graphgröße zu. tf.stop_gradients hilft aus irgendeinem Grund nicht. Was hilft, ist die Initialisierung eines neuen und eines neuen tf.Session() für alle paar Trainingsinstanzen (nennen Sie dies einen Mini-Batch), die Durchführung mehrerer solcher Berechnungen parallel (nennen dies eine Mini-Batch-Sammlung), und dann die Ergebnisse kombinieren und speichern sie für die nächste Mini-Batch-Sammlung.

def learning(mini_batch): 
    with tf.Graph().as_default() as g: 
     with tf.Session() as sess: 
      self.perform_learning_on_batch(mini_batch, sess) 
      return resultant_model 

def collection_learn(mini_batch_collection): 
    models = run_learning_in_parallel() 
    return combine_model(models) 

def master(): 
    initial_model = something 
    for mini_batch_collection in dataset: 
     new_model = collection_learn(mini_batch_collection) 

Gibt es eine bessere Möglichkeit, paralleles Lernen für eine solche Anwendung durchzuführen?

Antwort

0

Die dynamische Erstellung von TensorFlow-Diagrammen ist nicht so effizient wie die Wiederverwendung des Diagramms. Ohne einen Blick auf Ihren Code zu werfen, ist es schwer, mehr zu sagen, aber die gesamte bedingte Logik in TensorFlow zu falten wird dieses Problem verschwinden lassen. Sollte dies nicht gelingen, sollte auch der Versuch helfen, die generierten Diagramme zu cachen.

+0

Danke ... Ich beendete mit einer einfachen Implementierung von Regengradientenabstieg. Konnte mit Tensorflow nicht umgehen. Irgendeine Idee, wenn ein dynamischer Graphrahmen (wie pytorch) helfen würde? –

+0

Downpour-Gradientenabstieg wird von Tensorflow-Modellen standardmäßig für verteiltes und paralleles Training verwendet. –

Verwandte Themen