2017-12-04 1 views
0

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

Antwort

0

Sie aufzufüllen Ihre Chargen versuchen können, das heißt voller 0 ein Beispiel erstellen und mehrere Zeit in Ihrem Batch setzen, wenn Ihre Batch kleiner als Ihre max_size. Wenn Sie die Ergebnisse haben, verwerfen Sie einfach diejenigen, die aus dem Dummy-Beispiel stammen.

+0

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? –

+0

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

+0

Kann dieses Problem mit Warteschlangen oder ähnlichen Dingen gelöst werden? –

Verwandte Themen