web-dev-qa-db-fra.com

ValueError: le tenseur doit provenir du même graphique que le tenseur avec RNR bidirectinal dans Tensorflow

Je fais du tagueur de texte en utilisant le RNN dynamique bidirectionnel dans tensorflow. Après avoir maché la dimension de l'entrée, j'ai essayé de lancer une session. il s’agit des éléments de réglage blstm:

fw_lstm_cell = BasicLSTMCell(LSTM_DIMS)
bw_lstm_cell = BasicLSTMCell(LSTM_DIMS)

(fw_outputs, bw_outputs), _ = bidirectional_dynamic_rnn(fw_lstm_cell,
                                                        bw_lstm_cell,
                                                        x_place,
                                                        sequence_length=SEQLEN,
                                                        dtype='float32')

et c'est une partie courante:

  with tf.Graph().as_default():
    # Placehoder Settings
    x_place, y_place = set_placeholder(BATCH_SIZE, EM_DIMS, MAXLEN)

    # BLSTM Model Building
    hlogits = tf_kcpt.build_blstm(x_place)

    # Compute loss
    loss = tf_kcpt.get_loss(log_likelihood)

    # Training
    train_op = tf_kcpt.training(loss)

    # load Eval method
    eval_correct = tf_kcpt.evaluation(logits, y_place)

    # Session Setting & Init
    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)

    # tensor summary setting
    summary = tf.summary.merge_all()
    summary_writer = tf.summary.FileWriter(LOG_DIR, sess.graph)

    # Save
    saver = tf.train.Saver()

    # Run Epoch
    for step in range(Epoch):
        start_time = time.time()

        feed_dict = fill_feed_dict(KCPT_SET['train'], x_place, y_place)
        _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)

Mais ça me donne l'erreur:

ValueError: Tensor ("Shape: 0", shape = (1,), dtype = int32) doit provenir du même graphique que Tensor ("bidirectional_rnn/fw/fw/stack_2: 0", shape = (1,), dtype = int32).

Aidez-moi s'il vous plaît

22
Namang-K

TensorFlow stocke toutes les opérations sur un graphique opérationnel. Ce graphique définit les fonctions émises vers où, et les relie entre elles afin qu’il puisse suivre les étapes que vous avez définies dans le graphique pour produire votre sortie finale. Si vous essayez d'entrer un tenseur ou une opération sur un graphique dans un tenseur ou une opération sur un autre graphique, cela échouera. Tout doit être sur le même graphe d'exécution.

Essayez de supprimer with tf.Graph().as_default():

TensorFlow vous fournit un graphique par défaut auquel vous faites référence si vous ne spécifiez pas de graphique. Vous utilisez probablement le graphique par défaut à un endroit et un graphique différent dans votre bloc d’entraînement.

Il ne semble pas y avoir de raison pour laquelle vous spécifiez un graphique par défaut ici et très probablement que vous utilisez des graphiques distincts en cas d'accident. Si vous voulez vraiment spécifier un graphique, vous voudrez probablement le passer en tant que variable et non le définir comme ceci.

37
Max Weinzierl