Donc:
-
Un-à-un: vous pouvez utiliser un
Dense
de la couche que vous n'êtes pas de traitement de séquences:
model.add(Dense(output_size, input_shape=input_shape))
2. Un-à-plusieurs: cette option n'est pas pris en charge ainsi que le chaînage de modèles n'est pas très facile en Keras
, de sorte que la version suivante est la plus simple:
model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))
-
Plusieurs-à-un: en fait, votre extrait de code est (presque) un exemple de cette approche:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))
-
Plusieurs-à-plusieurs: C'est la méthode la plus simple extrait de quand la longueur de l'entrée et de sortie correspond au nombre de récurrent suit:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
-
Plusieurs-à-plusieurs, quand le nombre de mesures diffèrent d'entrée/de sortie longueur: c'est bizarre, dur dans Keras. Il n'y a pas des extraits de code pour code.
EDIT: Ad 5
Dans une de mes applications récentes, nous avons mis en place quelque chose qui pourrait être similaire à plusieurs à plusieurs à partir de la 4ème image. Dans le cas où vous voulez avoir un réseau avec l'architecture suivante (quand une entrée est plus longue que la sortie):
O O O
| | |
O O O O O O
| | | | | |
O O O O O O
Vous pourriez obtenir de la manière suivante:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :]
Où N
est le nombre de mesures que vous souhaitez couvrir (sur l'image N = 3
).
À partir de ce point d'arriver à:
O O O
| | |
O O O O O O
| | |
O O O
est aussi simple que artificielle rembourrage séquence de longueur N
en utilisant par exemple avec 0
vecteurs, afin de l'adapter à une taille appropriée.