web-dev-qa-db-fra.com

LSTMStateTuple vs cell.zero_state () pour RNN dans Tensorflow

Je ne sais pas quelle est la bonne façon d'utiliser le tenseur d'état initial dans Tensorflow pour les RNN. Il y a presque une répartition 50/50 entre les tortues qui utilisent soit LSTMStateTuple ou cell.zero_state .

Les deux sont-ils les mêmes? Si oui, pourquoi y a-t-il deux façons?

Dans un exemple, ils utilisent tf.nn.rnn_cell.LSTMStateTuple Pour définir l'état initial et dans l'autre, ils utilisent cell.zero_state().

Pourquoi y a-t-il deux méthodes? Quand préférer l'un ou l'autre? Pouvez-vous utiliser uniquement LSTMStateTuple lorsque vous définissez state_is_Tuple? Si c'est le cas, cell.zero_state() ne fonctionne plus?

12
user3139545

Les deux choses sont différentes. state_is_Tuple Est utilisé sur les cellules LSTM car l'état des cellules LSTM est un Tuple. cell.zero_state Est l'initialiseur de l'état pour toutes les cellules RNN.

Vous préférerez généralement la fonction cell.zero_state Car elle initialisera la classe d'état requise selon que state_is_Tuple Est vrai ou non.

Voir this Problème GitHub où vous pouvez voir le cell.zero_state Recommandé - "utilisez la fonction zero_state sur l'objet cellule".

Une autre raison pour laquelle vous voudrez peut-être cell.zero_state Est parce qu'elle est indépendante du type de cellule (LSTM, GRU, RNN) et vous pouvez faire quelque chose comme ceci:

if type == 'GRU':
   cell = BasicGRUCell
else:
   cell = BasicLSTMCell(state_is_Tuple=True)

init_state = cell.zero_state(batch_size)

l'état initial étant OK.

LSTMStateTuple ne fonctionnera que sur les cellules dont l'état est un Tuple.

Quand utiliser LSTMStateTuple?

Vous voudrez utiliser LSTMStateTuple lorsque vous initialisez votre état avec des valeurs personnalisées (transmises par le formateur). cell.zero_state() renverra l'état avec toutes les valeurs égales à 0,0.

Si vous souhaitez conserver l'état entre les lots, vous devrez l'obtenir après chaque lot et l'ajouter à votre feed_dict Le prochain lot.

Voir this pour une explication sur la raison pour laquelle l'état LSTM est un tuple.

9
Mihail Burduja