2017-03-02 8 views
0

Normalerweise rufen wir den Fahrbefehl mit dem Optimierungsbetrieb als Eingabe die trainierbar Parameter einiger Modell zu aktualisieren:tensorflow - laufen Optimierer op auf einem großen Stapel

session.run(model.optimizer_op, feed_dict={model.X: X_batch, model.y: y_batch}) 

Aber wenn die Chargengröße groß ist, X_batch kann nicht in den GPU-Speicher passen. Wie kann ich diese Aufgabe aufteilen, um eine große Losgröße zu verarbeiten?

Antwort

0

Dies hängt hauptsächlich von der Speichergröße Ihres Grafikprozessors ab. Es ist jedoch schwierig, den gesamten Datensatz zusammen mit dem Modell und seinen erforderlichen Operationen (d. H. Der Vorhersage von Wahrscheinlichkeiten) anzupassen. Sie müssen also an eine andere Perspektive denken. Ich gehe davon aus Sie den Code in diese Richtung geht:

# Model Definition  
X = tf.placeholder(tf.float32, shape=[None, DIM,DIM,3], name='X') 
y = tf.placeholder(tf.float32, shape=[None, N_CLASSES], name='y') 

... 

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 

... 

# Training your model 
sess.run([train_step], feed_dict={X: X_batch, y: y_batch}) 

Statt X und y als feed_dict zum train_step verwenden. Sie könnten einfach die cross_entropy für alle Stapel akkumulieren (d. H. Für den gesamten Datensatz). Dann können Sie die train_step einmal ausführen. Zum Beispiel:

cross_entropy_all = [] 
for X_batch, y_batch in batches_generator(): 
    cross_entropy_all += sess.run([cross_entropy], feed_dict={X: X_batch, y: y_batch}) 

# Numpy or Tensorflow equivalent for `vstack` 
cross_entropy_all = np.vstack(cross_entropy_all) 

# Run the optimizer on the entire dataset (not just on a specific batch) 
sess.run([train_step], feed_dict={cross_entropy: cross_entropy_all}) 

Dies sollte Ihr Ziel, ohne den Betrieb Ihren GPU aus dem Speicher erreichen. Der vorgeschlagene Ansatz führt den Optimierungsschritt gegen alle Kreuzentropien aus. Daher müssen Sie X und y nicht zuführen (die zur Erstellung des cross_entropy benötigt/benötigt werden, da sie bereits dem Optimierungsschritt zugeführt werden).

Verwandte Themen