Как получить последний вывод и полную последовательность LSTM или GRU в Keras одновременно?
В керасе, при использовании LSTM
или же GRU
если я установлю return_sequences=False
Я получу последний вывод; если я установлю return_sequences=True
Я получу полную последовательность; но как получить их обоих одновременно?
1 ответ
Решение
На самом деле, последний временной шаг вернулся, когда return_sequences=True
эквивалентно выводу слоя LSTM, когда return_sequences=False
:
lstm_out_rs = LSTM(..., return_sequences=True)(x)
lstm_out_rs[:,-1] # this is the last timestep of returned sequence
lstm_out = LSTM(..., return_sequences=False)(x)
lstm_out_rs[:,-1]
а также lstm_out
эквивалентны друг другу. Поэтому, чтобы иметь их обоих, вы можете использовать Lambda
слой:
lstm_out_rs = LSTM(..., return_sequences=True)(x)
out = Lambda(lambda t: [t, t[:,-1]])(lstm_out_rs)
# out[0] is all the outputs, out[1] is the last output