2017-03-10 4 views
3

Ich versuche, einen denoising Autoencoder mit einer LSTM-Schicht dazwischen zu implementieren. Die Architektur folgt.Fügen Sie eine dichte Schicht vor LSTM-Schicht in Keras oder Tensorflow hinzu?

FC layer -> FC layer -> LSTM cell -> FC layer -> FC layer. 

Ich bin nicht in der Lage zu verstehen, wie meine Input-Dimension sein sollte, um diese Architektur zu implementieren?

Ich habe versucht, den folgenden Code

batch_size = 1 
model = Sequential() 
model.add(Dense(5, input_shape=(1,))) 
model.add(Dense(10)) 
model.add(LSTM(32)) 
model.add(Dropout(0.3)) 
model.add(Dense(5)) 
model.add(Dense(1)) 
model.compile(loss='mean_squared_error', optimizer='adam') 
model.fit(trainX, trainY, nb_epoch=100, batch_size=batch_size, verbose=2) 

Mein trainX ist [650,20,1] Vektor. Es handelt sich um Zeitreihendaten mit nur einem Merkmal.

ich folgende Störung erhalten

ValueError        Traceback (most recent call last) 
<ipython-input-20-1248a33f6518> in <module>() 
     3 model.add(Dense(5, input_shape=(1,))) 
     4 model.add(Dense(10)) 
----> 5 model.add(LSTM(32)) 
     6 model.add(Dropout(0.3)) 
     7 model.add(Dense(5)) 

/usr/local/lib/python2.7/dist-packages/keras/models.pyc in add(self, layer) 
    330     output_shapes=[self.outputs[0]._keras_shape]) 
    331   else: 
--> 332    output_tensor = layer(self.outputs[0]) 
    333    if isinstance(output_tensor, list): 
    334     raise TypeError('All layers in a Sequential model ' 

/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc in __call__(self, x, mask) 
    527    # Raise exceptions in case the input is not compatible 
    528    # with the input_spec specified in the layer constructor. 
--> 529    self.assert_input_compatibility(x) 
    530 
    531    # Collect input shapes to build layer. 

/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc in assert_input_compatibility(self, input) 
    467           self.name + ': expected ndim=' + 
    468           str(spec.ndim) + ', found ndim=' + 
--> 469           str(K.ndim(x))) 
    470    if spec.dtype is not None: 
    471     if K.dtype(x) != spec.dtype: 

ValueError: Input 0 is incompatible with layer lstm_10: expected ndim=3, found ndim=2 
+0

Möchten Sie einen 'Dense' auf jeden Zeitschritt anwenden? –

+0

Nur zur Klarstellung versuche ich Architektur aus dem folgenden Papier zu implementieren. http://www1.icseli.berkeley.edu/~vinyals/Files/rnn_denoise_2012.pdf. Einfach RNN-Schicht durch LSTM-Zelle ersetzen. –

+0

In diesem Fall ist Nassim Antwort korrekt. –

Antwort

3

Die dichte Schicht kann Sequenzen als Eingabe und es wird die gleiche dichte Schicht auf jedem Vektor (letzte Dimension) gilt. Beispiel:

Sie haben einen 2D-Tensor-Eingang, der eine Sequenz (timesteps, dim_features) darstellt, wenn man eine dichte Schicht, um es mit new_dim Ausgaben gilt, der Tensor, die Sie nach der Schicht haben wird eine neue Sequenz (timesteps, new_dim)

Wenn Sie haben einen 3D-Tensor (n_lines, n_words, embedding_dim), dass ein Dokument, mit n_lines Linien sein kann, n_words Worte pro Linien und embedding_dim Dimensionen für jedes Wort, eine dichte Schicht, um es mit new_dim Ausgängen Anwendung wird mit Ihnen einen neuen doc Tensor (3D) erhalten Form (n_lines, n_words, new_dim)

Sie können see here die Eingabe und Ausgabe von Dimensionen, die Sie mit der Dense() -Schicht füllen und abrufen können.

+0

Woher wissen Sie, ob dies eine OP-Absicht war? Dies ist nicht direkt von der Frage. –

+0

Ich habe etwas NLP über seine Frage laufen lassen, um es vorherzusagen :) (nur vermutet, vielleicht nicht, aber da es nicht viele Informationen gibt, denke ich, dass er ein Anfängerlevel hat, auch wenn es nicht seine Frage ist, denke ich hilf ihm trotzdem :) wenn nicht, naja diese antwort ist ein paar bytes auf einem server, wird anywone nicht töten). –

+0

Ich frage - weil ich über eine Art 'Embedding' mit' linearen' Lernänderungen nachgedacht habe. In diesem Fall könnte Ihre Antwort schädlich sein. Die von Ihnen zur Verfügung gestellte Einsicht ist interessant, könnte aber tatsächlich völlig irreführend sein. –

Verwandte Themen