2017-08-02 5 views
0

Je le modèle séquentiel suivant qui fonctionne avec des entrées de longueur variable:couche d'enrobage Keras avec longueur variable dans l'API fonctionnelle

m = Sequential() 
m.add(Embedding(len(chars), 4, name="embedding")) 
m.add(Bidirectional(LSTM(16, unit_forget_bias=True, name="lstm"))) 
m.add(Dense(len(chars),name="dense")) 
m.add(Activation("softmax")) 
m.summary() 

Donne le résumé suivant:

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
embedding (Embedding)  (None, None, 4)   204  
_________________________________________________________________ 
bidirectional_2 (Bidirection (None, 32)    2688  
_________________________________________________________________ 
dense (Dense)    (None, 51)    1683  
_________________________________________________________________ 
activation_2 (Activation) (None, 51)    0   
================================================================= 
Total params: 4,575 
Trainable params: 4,575 
Non-trainable params: 0 

Cependant lorsque je tente de mettre en œuvre le même modèle dans l'API fonctionnelle Je ne sais pas ce que j'essaie car La forme de la couche d'entrée ne semble pas être la même que celle du modèle séquentiel. Voici un de mes essais:

charinput = Input(shape=(4,),name="input",dtype='int32') 
embedding = Embedding(len(chars), 4, name="embedding")(charinput) 
lstm = Bidirectional(LSTM(16, unit_forget_bias=True, name="lstm"))(embedding) 
dense = Dense(len(chars),name="dense")(lstm) 
output = Activation("softmax")(dense) 

Et voici le résumé:

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
input (InputLayer)   (None, 4)     0   
_________________________________________________________________ 
embedding (Embedding)  (None, 4, 4)    204  
_________________________________________________________________ 
bidirectional_1 (Bidirection (None, 32)    2688  
_________________________________________________________________ 
dense (Dense)    (None, 51)    1683  
_________________________________________________________________ 
activation_1 (Activation) (None, 51)    0   
================================================================= 
Total params: 4,575 
Trainable params: 4,575 
Non-trainable params: 0 

Répondre

0

Essayez d'ajouter l'argument input_length=None à la embeddinglayer.