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.