2016-03-23 8 views
2

Es scheint, Tensorflow unterstützt nicht variable Batch-Größe für bidirektionale RNN. In diesem Beispiel wird die sequence_length zu batch_size gebunden, die eine Python ganze Zahl ist:Wie variable Chargengröße für bidirektionale RNN in Tensorflow zu verwenden

_seq_len = tf.fill([batch_size], tf.constant(n_steps, dtype=tf.int64)) 
    outputs, state1,state2 = rnn.bidirectional_rnn(rnn_fw_cell, rnn_bw_cell, input, 
            dtype="float", 
            sequence_length=_seq_len) 

Wie kann ich unterschiedliche Losgrößen für Ausbildung und Prüfung verwenden?

Antwort

5

Der bidirektionale Code funktioniert mit variablen Losgrößen. Sehen Sie sich zum Beispiel this test code an, wodurch ein tf.placeholder(..., shape=(None, input_size)) erstellt wird (wobei None bedeutet, dass die Stapelgröße variabel sein kann).

Sie Ihren Code-Snippet umwandeln kann mit variablen Losgrößen mit einer kleinen Modifikation zu arbeiten:

# Compute the batch size based on the shape of the (presumably fed-in) `input` 
# tensor. (Assumes that `input = tf.placeholder(..., shape=[None, input_size])`.) 
batch_size = tf.shape(input)[0] 

_seq_len = tf.fill(tf.expand_dims(batch_size, 0), 
        tf.constant(n_steps, dtype=tf.int64)) 
outputs, state1, state2 = rnn.bidirectional_rnn(rnn_fw_cell, rnn_bw_cell, input, 
               dtype=tf.float32, 
               sequence_length=_seq_len) 
Verwandte Themen