web-dev-qa-db-fra.com

Dans Keras, qu'est-ce que je configure exactement lorsque je crée une couche avec état LSTM avec N unités?

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:

enter image description here

(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?

34

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.

24
Van

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: enter image description here Et ce serait votre modèle.

N=1
model = Sequential()
model.add(LSTM(N))

Pour les autres modèles, vous auriez besoin de N> 1 enter image description here

4
prosti

Combien d'instances de "chaînes LSTM"

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.

0
Peteris