77 votes

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

Les premiers arguments dans un Dense La couche est également units et est le 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, quand je crée un objet LSTM comme ceci LSTM(units=N, ...) Je suis en train de créer N de ces unités LSTM ? Ou est-ce la taille des couches du "réseau neuronal" à l'intérieur de l'unité LSTM, c'est-à-dire la taille de l'unité LSTM ? W dans les formules ? Ou est-ce quelque chose d'autre ?

Pour le contexte, je travaille sur la base de cet exemple de code .

La documentation est la suivante : https://keras.io/layers/recurrent/

C'est écrit :

unités : Nombre entier positif, dimensionnalité de l'espace de sortie.

Cela me fait penser que c'est le nombre de sorties de l'objet Keras LSTM "layer". Ce qui signifie que la couche suivante aura N des entrées. Cela signifie-t-il qu'il existe réellement N de ces unités LSTM dans la couche LSTM, ou peut-être que c'est exactement ça. un L'unité LSTM est exécutée pour N itérations produisant N de ces h[t] des valeurs, de, disons, 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 un ou devons-nous créer manuellement des variables d'entrée décalées ? x[t-N] a x[t] un pour chaque unité LSTM définie par l'option units=N argument ?

Alors que j'écris ceci, il me vient à l'esprit que l'argument return_sequences fait. S'il est réglé sur True tous les N les sorties sont transmises à la couche suivante, tandis que s'il est réglé sur False il ne passe que le dernier h[t] la sortie vers la couche suivante. Est-ce que j'ai raison ?

1 votes

0 votes

@Peteris Je ne pense pas que le marquage d'une question comme "dupliquée" sur les sites d'échange de piles soit une chose. Cette question concerne également Keras, une couche d'abstraction au-dessus de Tensorflow. Quoi qu'il en soit, le lien est utile et constitue une bonne référence, alors merci.

1 votes

Vérifiez ceci - zhuanlan.zhihu.com/p/58854907 . Une bonne explication.

45voto

Van Points 1812

Vous pouvez vérifier cette question pour plus d'informations, bien qu'il soit basé sur l'API de Keras-1.x.

En gros, le unit signifie la dimension des cellules internes dans le LSTM. En effet, dans un LSTM, la dimension de la cellule interne (C_t et C_{t-1} dans le graphe), du masque de sortie (o_t dans le graphe) et de l'état caché/sortie (h_t dans le graphe) doit être la même. SAME la dimension de la sortie doit donc être la suivante unit -longueur également.

Et LSTM dans Keras ne définissent qu'un seul bloc LSTM, dont les cellules sont de type unit -longueur. Si vous définissez return_sequence=True il retournera quelque chose avec une forme : (batch_size, timespan, unit) . Si false alors il renvoie simplement la dernière sortie dans la forme (batch_size, unit) .

Quant à l'entrée, vous devez fournir une entrée pour chaque horodatage. En gros, la forme est la suivante (batch_size, timespan, input_dim) , donde input_dim peut être différente de la unit . Si vous ne voulez fournir des données qu'à la première étape, vous pouvez simplement remplir vos données avec des zéros aux autres étapes du temps.

3 votes

Donc, cela signifie que le unit signifie la taille du vecteur qui est sorti par chaque cellule LSTM à chaque pas de temps. Mais comment Keras sait-il combien de ces cellules LSTM utiliser OU sera-t-il nécessaire pour s'entraîner sur les données ? Je veux dire, il est facile de déterminer le nombre de cellules LSTM nécessaires pour l'entrée (spécifiée en timespan ), mais comment déterminer le nombre d'unités LSTM nécessaires dans la sortie ?

0 votes

Merci d'avoir aidé !

18voto

prosti Points 4630

Cela signifie-t-il qu'il existe réellement N de ces unités LSTM dans la couche LSTM, ou peut-être qu'une seule unité LSTM est exécutée pendant N itérations, produisant N de ces valeurs h[t], depuis, disons, h[t-N] jusqu'à h[t] ?

La première est vraie. Dans cette couche LSTM de Keras, 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 envisagez de créer une couche LSTM simple avec 1 cellule, vous obtiendrez ceci : enter image description here Et ce serait votre modèle.

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

Pour les autres modèles, il faut N>1. enter image description here

0 votes

Pourquoi utiliserions-nous lstm dans one-to-one modèle ?

0 votes

Si le réseau neuronal est une transformation matricielle suivie d'une non-linéarité, il existe plusieurs réseaux neuronaux dans le LSMT. Je n'ai aucune idée précise de la raison pour laquelle j'utiliserais une seule cellule LSMT dans la pratique.

1 votes

Alors N est le nombre de cellules bleues ?

12voto

Peteris Points 355

Combien d'instances de "chaînes LSTM"

L'explication intuitive du paramètre "units" pour les réseaux neuronaux récurrents Keras est qu'avec units=1 vous obtenez un RNN tel que décrit dans les manuels, et avec units=n vous obtenez une couche qui se compose de n des 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.

Alternativement, vous pouvez 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 .

3voto

Rishang Points 33

"Intuitivement", tout comme une couche dense avec 100 dim (Dense(100)) aura 100 neurones. De même, LSTM(100) sera une couche de 100 'neurones intelligents' où chaque neurone est le chiffre que vous avez mentionné et la sortie sera un vecteur de 100 dimensions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X