2017-10-10 7 views
2

Une Keras introduction au modèle Seq2Seq ont été publiés il y a quelques semaines que l'on retrouve ici: https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html Je ne comprends pas vraiment une partie de ce code:Keras Seq2Seq Présentation

decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True) decoder_outputs, _, _= decoder_lstm(decoder_inputs,initial_state=encoder_states) decoder_dense = Dense(num_decoder_tokens, activation='softmax') decoder_outputs = decoder_dense(decoder_outputs)

Voici le decoder_lstm est défini. C'est une couche de dimension latent_dim. Nous utilisons les états de l'encodeur comme initial_state pour le décodeur. Qu'est-ce que je ne comprends pas, c'est pourquoi une couche dense est ensuite ajoutée après la couche LSTM et pourquoi cela fonctionne-t-elle? Le décodeur est censé renvoyer toute la séquence à cause de return_sequences = True, alors comment est-il possible que l'ajout d'une couche dense après fonctionne?

Je crois que je manque someting ici, merci d'avance pour votre aide

Ben

Répondre

2

Bien que les cas les plus courants utilisent des données 2D (batch,dim) comme entrées pour les couches denses, dans les versions les plus récentes de Keras vous pouvez utiliser des données 3D (batch,timesteps,dim).

Si vous n'aplatissez pas ces données 3D, votre couche Dense se comportera comme si elle s'appliquait à chacune des étapes de temps. Vous obtiendrez des sorties comme (batch,timesteps,dense_units)

Vous pouvez vérifier ces deux petits modèles ci-dessous et confirmer que indépendamment des pas de temps, les deux couches Dense ont le même nombre de paramètres, montrant que ses paramètres sont adaptés uniquement à la dernière dimension.

from keras.layers import * 
from keras.models import Model 
import keras.backend as K 

#model with time steps  
inp = Input((7,12)) 
out = Dense(5)(inp) 
model = Model(inp,out) 
model.summary() 

#model without time steps 
inp2 = Input((12,)) 
out2 = Dense(5)(inp2) 
model2 = Model(inp2,out2) 
model2.summary() 

Le résultat montrera 65 (12 * 5 + 5) paramètres dans les deux cas.