Le premier argument d'une couche Dense
normale est également units
, et correspond au nombre de neurones/nœuds dans cette couche. Une unité LSTM standard ressemble cependant à ce qui suit:
(Il s'agit d'une version retravaillée de " Comprendre les réseaux LSTM ")
Dans Keras, lorsque je crée un objet LSTM comme celui-ci LSTM(units=N, ...)
, est-ce que je crée réellement N
de ces unités LSTM? Ou est-ce la taille des couches "Neural Network" à l'intérieur de l'unité LSTM, c'est-à-dire les W
dans les formules? Ou s'agit-il d'autre chose?
Pour le contexte, je travaille sur la base de cet exemple de code .
Voici la documentation: https://keras.io/layers/recurrent/
Ça dit:
unités: entier positif, dimensionnalité de l'espace de sortie.
Cela me fait penser que c'est le nombre de sorties de l'objet "couche" Keras LSTM. Cela signifie que la couche suivante aura N
entrées. Est-ce à dire qu'il existe réellement N
de ces unités LSTM dans la couche LSTM, ou peut-être que c'est exactement une unité LSTM qui est exécutée pour N
itérations produisant N
de ces h[t]
valeurs, par exemple de h[t-N]
Jusqu'à h[t]
?
Si elle ne définit que le nombre de sorties, cela signifie-t-il que l'entrée peut toujours être, disons, juste une , ou devons-nous créer manuellement une entrée en retard variables x[t-N]
à x[t]
, un pour chaque unité LSTM définie par units=N
argument?
Au moment où j'écris ceci, je me rends compte de l'argument return_sequences
Est-ce que. Si elle est définie sur True
toutes les sorties N
sont transmises à la couche suivante, tandis que si elle est définie sur False
, elle ne passe que la dernière h[t]
sortie vers le calque suivant. Ai-je raison?
Vous pouvez vérifier cette question pour plus d'informations, bien qu'il soit basé sur l'API Keras-1.x.
Fondamentalement, le unit
signifie la dimension des cellules internes dans LSTM. Parce que dans LSTM, la dimension de la cellule intérieure (C_t et C_ {t-1} dans le graphique), le masque de sortie (o_t dans le graphique) et l'état caché/de sortie (h_t dans le graphique) devraient avoir le [~ # ~] même dimension [~ # ~] , par conséquent, la dimension de votre sortie doit également être unit
- de longueur.
Et LSTM
dans Keras ne définit qu'un seul bloc LSTM, dont les cellules ont une longueur de unit
-. Si vous définissez return_sequence=True
, il retournera quelque chose avec la forme: (batch_size, timespan, unit)
. Si false
, il retourne simplement la dernière sortie en forme (batch_size, unit)
.
En ce qui concerne l'entrée, vous devez fournir une entrée pour chaque horodatage. Fondamentalement, la forme est comme (batch_size, timespan, input_dim)
, où input_dim
peut être différent de unit
. Si vous souhaitez simplement fournir une entrée à la première étape, vous pouvez simplement remplir vos données avec des zéros à d'autres pas de temps.
Cela signifie-t-il qu'il existe réellement N de ces unités LSTM dans la couche LSTM, ou peut-être qu'exactement une seule unité LSTM est exécutée pour N itérations produisant N de ces valeurs h [t], par exemple de h [tN] jusqu'à h [t]?
Le premier est vrai. Dans cette couche Keras LSTM, il y a N unités ou cellules LSTM.
keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
Si vous prévoyez de créer une couche LSTM simple avec 1 cellule, vous terminerez par ceci: Et ce serait votre modèle.
N=1
model = Sequential()
model.add(LSTM(N))
L'explication intuitive appropriée du paramètre "unités" pour les réseaux de neurones récurrents Keras est celle avec units=1
vous obtenez un RNN comme décrit dans les manuels, et avec units=n
vous obtenez une couche qui se compose de n
copies indépendantes d'un tel RNN - elles auront une structure identique, mais comme elles seront initialisées avec des poids différents, elles calculeront quelque chose de différent.
Vous pouvez également considérer que dans un LSTM avec units=1
les valeurs clés (f, i, C, h) sont scalaires; et avec units=n
ce seront des vecteurs de longueur n
.