Wie werden die Eingabedimensionen in die Ausgabedimensionen für die LSTM-Ebene in Keras konvertiert? Nach dem Lesen von Colahs Blogpost scheint die Anzahl der "timesteps" (AKA der input_dim oder der erste Wert in input_shape) sollte der Anzahl der Neuronen entsprechen, die der Anzahl der Ausgänge dieser LSTM-Schicht entsprechen sollte (abgegrenzt durch {{X3) }} Argument für die Ebene LSTM).

Durch das Lesen von diesem Beitrag verstehe ich die Eingabeformen . Was mich verblüfft, ist, wie Keras die Eingänge in jedes der LSTM "Smart Neurons" einsteckt.

Keras LSTM-Referenz

Beispielcode, der mich verblüfft:

model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model.add(Dense(2))

Aus diesem Grund würde ich denken, dass die LSTM-Schicht 10 Neuronen hat und jedem Neuron ein Vektor der Länge 64 zugeführt wird. Es scheint jedoch, dass es 32 Neuronen hat und ich habe keine Ahnung, was in jedes eingespeist wird. Ich verstehe, dass für die Verbindung des LSTM mit der dichten Schicht einfach alle 32 Ausgänge an jedes der beiden Neuronen angeschlossen werden können. Was mich verwirrt, ist der InputLayer zum LSTM.

(ähnlicher SO-Beitrag, aber nicht ganz das, was ich brauche)

5
Sticky 18 Apr. 2018 im 09:21

3 Antworten

Beste Antwort

Ich hatte recht! Die Architektur besteht aus 10 Neuronen, die jeweils einen Zeitschritt darstellen. Jedem Neuron wird ein Vektor mit 64 Längen zugeführt, der 64 Merkmale darstellt (input_dim).

Die 32 repräsentiert die Anzahl der verborgenen Zustände oder die "Länge der verborgenen Einheit". Es stellt dar, wie viele verborgene Zustände es gibt, und stellt auch die Ausgabedimension dar (da wir den verborgenen Zustand am Ende des LSTM ausgeben).

Zuletzt wird der 32-dimensionale Ausgabevektor aus dem letzten Zeitschritt einer dichten Schicht von 2 Neuronen zugeführt, was im Grunde bedeutet, dass der 32-Längenvektor an beide Neuronen angeschlossen wird.

Mehr lesen mit etwas hilfreichen Antworten:

6
ajay singh negi 30 Dez. 2018 im 13:52

@ Sticky, du bist falsch in deiner Interpretation. Input_shape = (batch_size, sequence_length / timesteps, feature_size). Ihr Eingabetensor ist also 10x64 (wie 10 Wörter und seine 64 Merkmale. Genau wie das Einbetten von Wörtern) .32 sind Neuronen, um die Ausgabevektorgröße 32 zu bestimmen.

Die Ausgabe hat eine Formstruktur:

  1. (Batch, Arbitrary_steps, Units) wenn return_sequences = True.
  2. (Batch, Einheiten) wenn return_sequences = False.
  3. Die Speicherzustände haben eine Größe von "Einheiten".
1
Snehotosh Banerjee 2 Jän. 2019 im 07:06

Ich glaube nicht, dass du recht hast. Tatsächlich hat die Zeitschrittnummer keinen Einfluss auf die Anzahl der Parameter in LSTM.

from keras.layers import LSTM
from keras.models import Sequential

time_step = 13
featrue = 5
hidenfeatrue = 10

model = Sequential()
model.add(LSTM(hidenfeatrue, input_shape=(time_step, featrue)))
model.summary()

time_step=100
model2 = Sequential()
model2.add(LSTM(hidenfeatrue, input_shape=(time_step, featrue)))
model2.summary()

Das Ergebnis:

Using TensorFlow backend.
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 10)                640       
=================================================================
Total params: 640
Trainable params: 640
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_2 (LSTM)                (None, 10)                640       
=================================================================
Total params: 640
Trainable params: 640
Non-trainable params: 0
_________________________________________________________________
1
J.Dan 19 März 2019 im 06:52