Saltar al contenido

Muchos a uno y muchos a muchos ejemplos de LSTM en Keras

Bienvenido a nuestra página, en este sitio vas a encontrar la respuesta a lo que buscabas.

Solución:

Entonces:

  1. Doce y cincuenta y nueve de la noche: te vendría bien un Dense capa ya que no está procesando secuencias:

    model.add(Dense(output_size, input_shape=input_shape))
    
  2. Uno a muchos: esta opción no está bien soportada ya que encadenar modelos no es muy fácil en Keraspor lo que la siguiente versión es la más fácil:

    model.add(RepeatVector(number_of_times, input_shape=input_shape))
    model.add(LSTM(output_size, return_sequences=True))
    
  3. muchos a uno: en realidad, su fragmento de código es (casi) un ejemplo de este enfoque:

    model = Sequential()
    model.add(LSTM(1, input_shape=(timesteps, data_dim)))
    
  4. Muchos a muchos: este es el fragmento más fácil cuando la longitud de la entrada y la salida coincide con el número de pasos recurrentes:

    model = Sequential()
    model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
    
  5. Muchos a muchos cuando el número de pasos difiere de la longitud de entrada/salida: esto es muy duro en Keras. No hay fragmentos de código fáciles para codificar eso.

EDITAR: Anuncio 5

En una de mis aplicaciones recientes, implementamos algo que podría ser similar a muchos a muchos de la 4ta imagen. En caso de querer tener una red con la siguiente arquitectura (cuando una entrada es más larga que la salida):

                                        O O O
                                        | | |
                                  O O O O O O
                                  | | | | | | 
                                  O O O O O O

Podrías lograr esto de la siguiente manera:

model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :])) #Select last N from output

Donde N es el número de últimos pasos que desea cubrir (en la imagen N = 3).

Desde este punto llegar a:

                                        O O O
                                        | | |
                                  O O O O O O
                                  | | | 
                                  O O O 

es tan simple como una secuencia de relleno artificial de longitud N usando por ejemplo con 0 vectores, con el fin de ajustarlo a un tamaño adecuado.

Gran respuesta de @Marcin Możejko

me gustaría agregue lo siguiente a NR.5 (muchos a muchos con diferentes longitudes de entrada/salida):

A) como vainilla LSTM

model = Sequential()
model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES)))
model.add(Dense(N_OUTPUTS))

B) como Codificador-Decodificador LSTM

model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES))  
model.add(RepeatVector(N_OUTPUTS))
model.add(LSTM(N_BLOCKS, return_sequences=True))  
model.add(TimeDistributed(Dense(1)))
model.add(Activation('linear')) 

Sección de Reseñas y Valoraciones

Recuerda algo, que te permitimos comentar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *