Ich trainiere ein Standard, einfache Multilayer-Perzeptron ANN mit drei versteckten Schichten in TensorFlow. Ich fügte einen Textfortschrittsbalken hinzu, so dass ich den Fortschritt der Iteration durch die Epochen beobachten konnte. Was ich finde, ist, dass die Verarbeitungszeit pro Iteration nach den ersten paar Epochen zunimmt. Hier ist ein Beispiel-Screenshot die Zunahme bei jeder Iteration zeigt:TensorFlow: Jede Iteration im Training for-loop langsamer
In diesem Fall werden die ersten paar Iterationen dauerte etwa 1.05s/es und um 100% wurde 4.01s/mitnimmt.
Der entsprechende Code ist hier aufgelistet:
# ------------------------- Build the TensorFlow Graph -------------------------
with tf.Graph().as_default():
(a bunch of statements for specifying the graph)
# --------------------------------- Training ----------------------------------
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print "Start Training"
pbar = tqdm(total = training_epochs)
for epoch in range(training_epochs):
avg_cost = 0.0
batch_iter = 0
while batch_iter < batch_size:
train_features = []
train_labels = []
batch_segments = random.sample(train_segments, 20)
for segment in batch_segments:
train_features.append(segment[0])
train_labels.append(segment[1])
sess.run(optimizer, feed_dict={x: train_features, y_: train_labels})
line_out = "," + str(batch_iter) + "\n"
train_outfile.write(line_out)
line_out = ",," + str(sess.run(tf.reduce_mean(weights['h1']), feed_dict={x: train_features, y_: train_labels}))
line_out += "," + str(sess.run(tf.reduce_mean(weights['h2']), feed_dict={x: train_features, y_: train_labels}))
line_out += "," + str(sess.run(tf.reduce_mean(weights['h3']), feed_dict={x: train_features, y_: train_labels})) + "\n"
train_outfile.write(line_out)
avg_cost += sess.run(cost, feed_dict={x: train_features, y_: train_labels})/batch_size
batch_iter += 1
pbar.update(1) # Increment the progress bar by one
train_outfile.close()
print "Completed training"
In Stackoverflow Suche, fand ich Processing time gets longer and longer after each iteration wo jemand anderes war auch Probleme mit jeder Iteration, die länger als die letzte ist. Aber ich glaube, mein verschieden sein können, da sie eindeutig ops wurden dem Diagramm Hinzufügen-Anweisungen wie folgt:
distorted_image = tf.image.random_flip_left_right(image_tensor)
Während ich TensorFlow bin neu, ich glaube nicht, dass ich den gleichen Fehler mache weil die einzigen Sachen in meiner Schleife sess.run() sind.
Jede Hilfe wird sehr geschätzt.
Hinzufügen in den Körper der Schleife mit session.run Aufruf erzwingt Serialisierung/Kopieren des gesamten Graphen, so dass diese Art von Schleife quadratische Komplexität hat. Sie können tun 'self.tf.get_default_graph(). Finalize()', damit Sie keine versehentlichen Änderungen von Graphen wie dieser haben –
@ YaroslavBulatov, vielen Dank für die mich auf die finalize() -Funktion. Ich wusste nichts davon. Ich konnte ein paar andere Stellen finden, an denen ich versehentlich Graphen hinzufügte. – DojoGojira
@etarion, habe ich ausdrücklich auf den anderen Thread verwiesen (es war der Hyperlink für "diesen Beitrag") und fühlte, dass mein anderer war. Ich werde meine Frage bearbeiten, um das klarzustellen. – DojoGojira