J'essaie de comprendre l'enveloppe cellulaire RNN dans TensorFlow (version 1.3) avec le code suivant (tiré de here).tf.nn.rnn_cell.MultiRNNCell crée une discordance de forme variable?
import tensorflow as tf
import numpy as np
tf.reset_default_graph()
X = np.random.randn(2, 10, 8)
X[1, 6:] = 0
X_lengths = [10, 6]
cell = tf.nn.rnn_cell.LSTMCell(num_units=64, state_is_tuple=True)
cell = tf.nn.rnn_cell.DropoutWrapper(cell=cell, output_keep_prob=0.5)
# cell = tf.nn.rnn_cell.MultiRNNCell(cells=[cell] * n, state_is_tuple=True)
cell = tf.nn.rnn_cell.MultiRNNCell(cells=[cell for _ in range(n)], state_is_tuple=True)
outputs, last_states = tf.nn.dynamic_rnn(
cell=cell,
dtype=tf.float64,
sequence_length=X_lengths,
inputs=X)
result = tf.contrib.learn.run_n(
{"outputs": outputs, "last_states": last_states},
n=1,
feed_dict=None)
print(result[0]["outputs"].shape)
print(result[0]["outputs"])
...
La première question est liée à la ligne de code qui implique tf.nn.rnn_cell.MultiRNNCell
. Plus précisément, le code s'exécute correctement lorsque n=1
(ce qui signifie qu'une seule couche est réellement générée). Lorsque n>=2
est utilisé, il y a toujours un message d'erreur comme suit (à la fois la ligne d'origine commenté et une autre mise en œuvre dessous ont suggéré here donner les mêmes informations d'erreur):
ValueError: Trying to share variable rnn/multi_rnn_cell/cell_0/lstm_cell/kernel, but specified shape (128, 256) and found shape (72, 256).
Sur la base de mon enquête jusqu'à présent, l'erreur vient à l'appel de fonction tf.nn_dynamic_rnn()
. Mais je ne pouvais pas comprendre la raison exacte pour l'instant. Quelqu'un pourrait-il expliquer et donner des directives sur l'utilisation des emballages de cellules RNN?
La deuxième question concerne un message d'AVERTISSEMENT relatif à la dépréciation de la fonction tf.contrib.learn.run_n
. Le message suggère également ce qui suit: Utilisez plutôt les utilitaires tf.train.*
. Vous pouvez utiliser learn/estimators/estimator.py comme exemple. Je ne pouvais pas non plus trouver un bon moyen d'utiliser les bons utilitaires ici (pardonnez mes connaissances superficielles sur TensorFlow).
Tous les commentaires/suggestions concernant l'une ou l'autre ou les deux questions sont les bienvenus. Merci!
Je vous recommande de poser votre deuxième question séparément. Stack O aime garder chaque question assez atomique. Je crois que la première question a été répondue (le correctif fonctionne sur mon système de toute façon). – Engineero
Merci pour la suggestion. J'ai fait quelques recherches et j'ai trouvé que [CentAu] (https://stackoverflow.com/questions/44418495/replacement-of-tf-contrib-learn-run-n-in-tensorflow-1-0) a posé la même question avant mais n'a pas encore reçu de réponse. Pour ne pas dupliquer la question, peut-être pourriez-vous faire la lumière ici. –