Многослойный LSTM без tf.contrib.rnn.MultiRNNCell

#tensorflow #neural-network #lstm

#tensorflow #нейронная сеть #lstm

Вопрос:

Для реализации многослойной сети LSTM я обычно использую следующий код:

 def lstm_cell():
    return tf.contrib.rnn.LayerNormBasicLSTMCell(model_settin&s['rnn_size'])
    
attn_cell = lstm_cell
    
def attn_cell():
    return tf.contrib.rnn.DropoutWrapper(lstm_cell(), output_keep_prob=0.7)
    
cell = tf.contrib.rnn.MultiRNNCell([attn_cell() for _ in ran&e(num_layers)], state_is_tuple=True)
outputs_, _ = tf.nn.dynamic_rnn(cell, x, dtype=tf.float32)
  

Но, таким образом, у меня нет доступа к выходам скрытого слоя, если я хочу манипулировать расположением выходов скрытого слоя.
Есть ли какой-либо другой способ создать многослойную сеть LSTM без использования tf.contrib.rnn.MultiRNNCell?

Ответ №1:

Вы можете просто сложить несколько слоев LSTM, например, с помощью модуля Sequential:

 model = Sequential()
model.add(layers.LSTM(..., return_sequences = True, input_shape = (...)))
model.add(layers.LSTM(..., return_sequences = True)
...
model.add(layers.LSTM(...))
  

В этом случае return sequences ключевое слово имеет решающее значение для промежуточных слоев.