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.
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)
3 Antworten
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:
- Grundlegendes zu Keras-LSTMs
- Was genau konfiguriere ich, wenn ich eine zustandsbehaftete LSTM-Schicht mit N Einheiten erstelle?
- Initialisieren von versteckten LSTM-Zuständen mit Keras
@ 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:
- (Batch, Arbitrary_steps, Units) wenn return_sequences = True.
- (Batch, Einheiten) wenn return_sequences = False.
- Die Speicherzustände haben eine Größe von "Einheiten".
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
_________________________________________________________________
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.