web-dev-qa-db-ja.com

ValueError:Tensorは、Tensorflowの双方向RNNを持つTensorと同じグラフからのものでなければなりません

私はテンソルフローで双方向動的RNNを使用してテキストタガーをやっています。入力のディメンションを加工した後、セッションを実行しようとしました。これは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')

そして、これは実行部分です:

  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)

しかし、それは私にエラーを与えます:

ValueError:Tensor( "Shape:0"、shape =(1、)、dtype = int32)は、Tensor( "bidirectional_rnn/fw/fw/stack_2:0"、shape =(1、)、dtypeと同じグラフからのものでなければなりません= int32)。

お願い助けて

22
Namang-K

TensorFlowは、すべての操作を運用グラフに保存します。このグラフは、どの関数をどこに出力するかを定義し、グラフで設定した手順に従って最終的な出力を生成できるようにすべてをリンクします。あるグラフのテンソルまたは操作を別のグラフのテンソルまたは操作に入力しようとすると、失敗します。すべてが同じ実行グラフ上にある必要があります。

with tf.Graph().as_default():を削除してみてください

TensorFlowは、グラフを指定しない場合に参照されるデフォルトのグラフを提供します。おそらく、1つのスポットでデフォルトのグラフを使用し、トレーニングブロックで別のグラフを使用している可能性があります。

ここでデフォルトとしてグラフを指定している理由はないようで、おそらく偶然に別のグラフを使用している可能性があります。本当にグラフを指定したい場合は、おそらくこのように設定するのではなく、変数として渡したいと思うでしょう。

37
Max Weinzierl