ValueError: Tensor 必须来自与 Tensorflow 中具有双向 RNN 的 Tensor 相同的图

Posted

技术标签:

【中文标题】ValueError: Tensor 必须来自与 Tensorflow 中具有双向 RNN 的 Tensor 相同的图【英文标题】:ValueError: Tensor must be from the same graph as Tensor with Bidirectinal RNN in Tensorflow 【发布时间】:2017-07-25 18:59:55 【问题描述】:

我正在使用 TensorFlow 中的双向动态 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)。

请帮帮我

【问题讨论】:

您能提供更多代码吗?我认为您可能会将它们定义在单独的图表上。 @MaxWeinzierl 我编辑了我的问题!谢谢你的cmets。 能否提供完整的代码?? 【参考方案1】:

TensorFlow 将所有操作存储在操作图上。该图定义了哪些函数输出到哪里,并将它们链接在一起,以便它可以按照您在图中设置的步骤来生成最终输出。如果您尝试将一个图上的张量或操作输入到另一张图上的张量或操作中,它将失败。一切都必须在同一个执行图上。

尝试删除with tf.Graph().as_default():

TensorFlow 为您提供了一个默认图,如果您未指定图,则会引用该图。您可能在一个地方使用了默认图表,而在您的训练块中使用了不同的图表。

您似乎没有理由在此处将图表指定为默认图表,而且您很可能是在不小心使用了单独的图表。如果您真的想指定一个图形,那么您可能希望将其作为变量传递,而不是这样设置。

【讨论】:

您也可以通过tf.reset_default_graph() 重置图表,然后再次执行所有代码块。这通常可以解决问题 为什么with tf.Graph().as_default():不重用已经创建的图? 我分配给变量并稍后重用它,但仍然没有工作。 ValueError: Tensor("optimizations:0", shape=(3,), dtype=string) 必须与 Tensor("PaddedBatchDatasetV2:0", shape=(), dtype=variant) 来自同一个图。 @mrgloom tf.Graph() 创建一个新图【参考方案2】:

如果您将 tf 2.x 与 Keras 一起使用 - 那么在构建模型图之前禁用急切执行可能会有所帮助。所以要禁用急切执行 - 在定义模型之前添加以下行。

tf.compat.v1.disable_eager_execution()

【讨论】:

【参考方案3】:

或者您可以转到“内核”并选择“重新启动并清除输出”。 :D

【讨论】:

以上是关于ValueError: Tensor 必须来自与 Tensorflow 中具有双向 RNN 的 Tensor 相同的图的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: Cannot feed value of shape (2,) for Tensor u'Placeholder_2:0', which has shape &

ValueError: Tensor Tensor("Const:0", shape=(), dtype=float32) 可能无法使用 tf.placeholder

tensorflow models api:ValueError: Tensor conversion requested dtype string for Tensor with dtype flo

Python - Tensor Flow Error,Tensor必须来自同一个图形

keras 报错 ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Ten

Numpy将矩阵附加到Tensor