Bienvenido a nuestra página, en este sitio vas a encontrar la respuesta a lo que buscabas.
Solución:
Entonces:
-
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))
-
Uno a muchos: esta opción no está bien soportada ya que encadenar modelos no es muy fácil en
Keras
por 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))
-
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)))
-
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))
-
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ó.