Dato un modello LSTM addestrato, desidero eseguire l'inferenza per singoli timestep, ad esempio seq_length = 1
nell'esempio seguente. Dopo ogni timestep, gli stati interni LSTM (memoria e nascosto) devono essere ricordati per il successivo "batch". Per l'inizio della deduzione vengono indicati gli LSTM interni init_c, init_h
dato l'input. Questi vengono quindi memorizzati in un oggetto LSTMStateTuple
che viene passato all'LSTM. Durante l'allenamento questo stato viene aggiornato ogni volta. Tuttavia, per l'inferenza, voglio che lo state
venga salvato tra i lotti, vale a dire che gli stati iniziali devono essere calcolati solo all'inizio e dopo che gli stati LSTM devono essere salvati dopo ogni "batch" (n = 1).TensorFlow: ricordare lo stato LSTM per il batch successivo (stato LSTM)
Ho trovato questa domanda StackOverflow correlata: Tensorflow, best way to save state in RNNs?. Tuttavia, questo funziona solo se state_is_tuple=False
, ma questo comportamento è presto deprecato da TensorFlow (vedere rnn_cell.py). Keras sembra avere un buon wrapper per rendere possibili gli LSTM LSTM, ma non conosco il modo migliore per farlo in TensorFlow. Questo problema sul GitHub di TensorFlow è anche relativo alla mia domanda: https://github.com/tensorflow/tensorflow/issues/2838
Qualcuno buoni suggerimenti per la costruzione di un modello LSTM stateful?
inputs = tf.placeholder(tf.float32, shape=[None, seq_length, 84, 84], name="inputs")
targets = tf.placeholder(tf.float32, shape=[None, seq_length], name="targets")
num_lstm_layers = 2
with tf.variable_scope("LSTM") as scope:
lstm_cell = tf.nn.rnn_cell.LSTMCell(512, initializer=initializer, state_is_tuple=True)
self.lstm = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * num_lstm_layers, state_is_tuple=True)
init_c = # compute initial LSTM memory state using contents in placeholder 'inputs'
init_h = # compute initial LSTM hidden state using contents in placeholder 'inputs'
self.state = [tf.nn.rnn_cell.LSTMStateTuple(init_c, init_h)] * num_lstm_layers
outputs = []
for step in range(seq_length):
if step != 0:
scope.reuse_variables()
# CNN features, as input for LSTM
x_t = # ...
# LSTM step through time
output, self.state = self.lstm(x_t, self.state)
outputs.append(output)
Possibile duplicato di [Tensorflow, il modo migliore per salvare lo stato negli RNN?] (Http://stackoverflow.com/questions/37969065/tensorflow-best-way-to-save-state-in-rnns) –