2 votes

Tensorflow erreur : La variable gru_def/rnn/gru_cell/gates/kernel n'existe pas ou n'a pas été créée avec tf.get_variable()

C'est la première fois que je programme avec python et tensorflow. Je voudrais utiliser un RNN dynamique pour construire des embeddings de phrases. Voici une partie de mon code écrit dans jupyter.

graph = tf.Graph()
x_data = tf.placeholder(tf.int32, [None,None])
sequence_lengths = tf.placeholder(tf.int32, shape=[None])
embedding_mat = tf.Variable(tf.random_uniform([vocab_size,embedding_size],  0.0, 1.0),dtype=tf.float32)
embedding_output = tf.nn.embedding_lookup(embedding_mat,x_data)

with tf.variable_scope('cell_def'):
    cell =tf.contrib.rnn.GRUCell(num_units = rnn_size)
    hidden_state_in =cell.zero_state(batch_size,tf.float32) 
with tf.variable_scope('gru_def'):
    output, state = tf.nn.dynamic_rnn(cell,embedding_output,initial_state=hidden_state_in,dtype=tf.float32,sequence_length=sequence_lengths)

with tf.Session(graph=graph) as sess:
    sess.run(tf.global_variables_initializer())
    feed_dict = {x_data:embedding_output}
    sess.run(output,feed_dict=feed_dict)
    #tf.get_variable_scope().reuse_variables()    
sess.close()    

Quand j'exécute mon code, j'obtiens cette erreur:

Variable gru_def/rnn/gru_cell/gates/kernel existe déjà, interdite. Vouliez-vous définir reuse=True ou reuse=tf.AUTO_REUSE dans VarScope? Définit initialement à:

J'essaie de résoudre ce problème en appelant tf.get_variable_scope().reuse_variables() pour définir le drapeau reuse à True mais l'erreur persiste.

Ensuite, j'ajoute un paramètre reuse à la GRUCell mais j'obtiens cette erreur:

ValueError: La variable gru_def/rnn/gru_cell/gates/kernel n'existe pas, ou n'a pas été créé avec tf.get_variable(). Vouliez-vous définir reuse=tf.AUTO_REUSE dans VarScope?

cell = tf.contrib.rnn.GRUCell(num_units = rnn_size,reuse=True)

Pouvez-vous m'aider s'il vous plaît.

1voto

Maxim Points 28843

Dans tensorflow 1.3+:

cell = tf.contrib.rnn.GRUCell(num_units=rnn_size, reuse=tf.AUTO_REUSE)

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