【问题标题】:ValueError: Tensor must be from the same graph as Tensor with Bidirectinal RNN in TensorflowValueError: Tensor 必须来自与 Tensorflow 中具有双向 RNN 的 Tensor 相同的图
【发布时间】: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。
  • 能否提供完整的代码??

标签: python tensorflow deep-learning recurrent-neural-network bidirectional


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-20
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      相关资源
      最近更新 更多