Ich habe ein trainierte Netzwerk mit Eingang:Tensorflow bewertet Netzwerk mit unterschiedlicher Chargengröße
input = tf.placeholder(dtype=tf.float32, shape=(None, width, height, channels), name='input')
In der Praxis Ich möchte in der Lage sein, Vorhersagen zu machen mit variabler batch_size (mit maximaler Losgröße batch_max, sagen wir 100), dh
imgs = get_batch(batch_size=1)
session.run([output], feed_dict={'input:0': imgs})
imgs = get_batch(batch_size=100)
session.run([output], feed_dict={'input:0': imgs})
Jetzt habe ich das folgende Verhalten beobachtet:
imgs_batch1 = get_batch(batch_size=1)
imgs_batch100 = get_batch(batch_size=100)
session.run([output], feed_dict={'input:0': imgs_batch1})
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.5s
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.0s
session.run([output], feed_dict={'input:0': imgs_batch1})
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.5s
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.0s
Sonst gesagt, die Änderung der Batchgröße verlangsamt die Auswertung. Die erste Auswertung einer Chargengröße ist deutlich langsamer als die direkte Auswertung derselben Chargengröße.
Das klingt vernünftig, ich kann logische Gründe finden, warum das der Fall wäre. Aber da ich die maximale Batch-Größe kenne, die jemals als Eingabe gesendet wird, gibt es keinen besseren Weg, dies zu erreichen, ohne die Geschwindigkeit zu verringern, sobald ein Batch der Größe 1 gesendet wird?
Dank
Aber dann nehme ich an, dass ich keine Gewinnzeiten hätte, wenn ich die Batch-Größe 1 ausführen würde, oder? Da es im Wesentlichen eine Batch-Größe von max_size mit (max_size - 1) Dummies wäre? –
Ja, Sie haben Recht. Aber wenn Sie viele Chargen von Größe 100 und wenige Chargen von 1 haben, wird es vielleicht eine Steigerung der Geschwindigkeit geben. Ansonsten nein. – abcdaire
Kann dieses Problem mit Warteschlangen oder ähnlichen Dingen gelöst werden? –