2017-06-09 2 views
2

Im folgenden Code wird die None verwendet, um die Größe der Platzhalter zu deklarieren.Warum None für die Batch-Dimension im Tensorflow verwenden?

Wie ich weiß, wird None verwendet, um eine variable Batch-Dimension anzugeben. Aber in jedem Code, haben wir eine Variable, die die Chargengröße zeigt, wie:

batch_size = 250 

Also, gibt es keinen Grund None in solchen Fällen zu verwenden, anstatt einfach erklärt die Platzhalter wie?

x_data = tf.placeholder(tf.int32, [batch_size, max_sequence_length]) 
y_output = tf.placeholder(tf.int32, [batch_size]) 
+3

So dass Sie alle Ihre Test-Proben auf einmal oder sogar einen tschüss vorhersagen können. Andernfalls müsste die Eingabe in das Netzwerk immer Chargen mit fester Größe sein. –

+0

@ImanolLuengo Danke! Scheint vernünftig. Ich würde es gerne akzeptieren, wenn Sie als Antwort posten. – Hossein

+0

Hinzugefügt mit einigen weiteren Kommentaren! –

Antwort

2

Es ist nur so, dass der Eingang des Netzwerks erhält nicht auf eine feste große Chargen begrenzt, und Sie können das Gelernte Netzwerk später wieder verwenden entweder einzelne Instanzen oder beliebig lange Chargen (zB vorhersagen alle vorherzusagen Ihre Testproben auf einmal).

Mit anderen Worten, es tut nicht viel während des Trainings, da die Chargen normalerweise während des Transdens eine feste Größe haben, aber es macht das Netzwerk nützlicher beim Testen.

+1

Als ergänzenden Kommentar, unsere letzte Charge während des Trainings kann eine geringere Anzahl von Elementen als 'batch_size' haben, so dass es auch während des Trainings nützlich sein kann. – Hossein

+1

@ Hossein Sicher! In Einzelanwendungen werden Stapel automatisch durch Datenerweiterung oder zufällige Schleifen erstellt, sodass alle Stapel immer die gleiche Größe haben. Aber in Single-Pass-Ansätzen wird die letzte Charge sicherlich eine andere Größe haben! Schön zum Aufzeigen. –

Verwandte Themen