J'étudie les LSTM depuis un certain temps. Je comprends à un haut niveau comment tout fonctionne. Cependant, en les implémentant à l'aide de Tensorflow, j'ai remarqué que BasicLSTMCell nécessite un certain nombre d'unités (c'est-à-dire num_units
) un paramètre.
D'après cette explication très approfondie des LSTM, j'ai compris qu'une seule unité LSTM est l'une des suivantes
qui est en fait une unité GRU.
Je suppose que le paramètre num_units
de BasicLSTMCell
fait référence au nombre de ceux-ci que nous voulons connecter les uns aux autres dans une couche.
Cela laisse la question - qu'est-ce qu'une "cellule" dans ce contexte? Une "cellule" est-elle équivalente à une couche dans un réseau neuronal à action normale?
Réponses:
La terminologie est malheureusement incohérente.ht
num_units
dans TensorFlow est le nombre d'états cachés, c'est-à-dire la dimension de dans les équations que vous avez données.Aussi, depuis https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :
La "couche LSTM" est probablement plus explicite, exemple :
la source
num_unit
réseau horizontal de taille de cellules LSTM interconnectées. Logique. Alors, ce serait analogue à une couche cachée dans un réseau à action directe standard alors?La plupart des diagrammes LSTM / RNN montrent simplement les cellules cachées mais jamais les unités de ces cellules. D'où la confusion. Chaque couche cachée a des cellules cachées, autant que le nombre de pas de temps. Et de plus, chaque cellule cachée est composée de plusieurs unités cachées, comme dans le diagramme ci-dessous. Par conséquent, la dimensionnalité d'une matrice de couche cachée dans RNN est (nombre de pas de temps, nombre d'unités cachées).
la source
Bien que le problème soit presque le même que celui auquel j'ai répondu dans cette réponse , je voudrais illustrer ce problème, qui m'a également un peu dérouté aujourd'hui dans le modèle seq2seq (grâce à la réponse de @Franck Dernoncourt), dans le graphique. Dans ce schéma d'encodeur simple:
la source
num_units = n
dans cette figureÀ mon avis, cellule signifie un nœud tel qu'une cellule cachée qui est également appelée nœud caché, pour le modèle LSTM multicouche, le nombre de cellules peut être calculé par time_steps * num_layers, et le num_units est égal à time_steps
la source
Cette unité dans Keras est la dimension de l'espace de sortie, qui est égale à la longueur du retard (time_step) auquel le réseau se reproduit.
https://keras.io/layers/recurrent/
la source