2017-07-12 4 views
1

Gemäß der offiziellen Website von Tensorflow (https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/BasicLSTMCell#zero_state) muss zero_state eine Batch-Größe angeben. Viele Beispiele, die ich verwende diesen Code gefunden:Wie setze ich Tensorflow dynamic_rnn, zero_state ohne feste Batchgröße?

init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32) 

    outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, X_in, 
     initial_state=init_state, time_major=False) 

Für Trainingsschritte, dann ist es in Ordnung, die Stapelgröße zu beheben. Bei der Vorhersage hat der Testsatz jedoch möglicherweise nicht die gleiche Form wie die Batchgröße des Trainingssatzes. Zum Beispiel hat eine Charge meiner Trainingsdaten die Form [100, 255, 128]. Die Stapelgröße beträgt 100 mit 255 Schritten und 128 Eingaben. Während der Testsatz [2000, 255, 128] ist. Ich kann nicht vorhersagen, da es in dynamic_rnn (initial_state) bereits eine feste batch_size = 100 gesetzt hat. Wie behebe ich das?

Danke.

Antwort

2

Sie können batch_size als Platzhalter und nicht als Konstante angeben. So stellen Sie sicher, dass die entsprechende Nummer in feed_dict füttern, die für die Ausbildung unterschiedlich sein wird und für

Prüfung

Wichtig ist, geben Sie [] als Dimensionen für den Platzhalter, da Sie Fehlermeldungen erhalten können, wenn Sie None angeben, wie anderswo üblich ist. So etwas wie dies funktionieren soll:

batch_size = tf.placeholder(tf.int32, [], name='batch_size') 
init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32) 
outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, X_in, 
     initial_state=init_state, time_major=False) 
# rest of your code 
out = sess.run(outputs, feed_dict={batch_size:100}) 
out = sess.run(outputs, feed_dict={batch_size:10}) 

Offensichtlich sicher, dass die Batch-Parameter die Form Ihrer Eingaben übereinstimmt, die dynamic_rnn als [batch_size, seq_len, features] oder [seq_len, batch_size, features] interpretieren, wenn time_major-True gesetzt

+0

Es ist sehr rücksichtsvoll zu setzen Beispielcode. Vielen Dank. – David

Verwandte Themen