【问题标题】:TensorFlow estimator.predict() gives WARNING:tensorflow:Input graph does not contain a QueueRunnerTensorFlow estimator.predict() 给出警告:tensorflow:输入图不包含 QueueRunner
【发布时间】:2017-10-20 21:10:04
【问题描述】:

我正在尝试使用带有estimator.predict 的自定义输入函数进行预测,但它给了我这个:

WARNING:tensorflow:Input graph does not contain a QueueRunner. That means predict yields forever. This is probably a mistake.

它没有给我一个错误,但predict 只是说它的恢复参数并没有返回实际的预测。这是我的代码:

test_data = [0.03, 0.91, 0.95, 0.10, 0.56, 0.93]
test_data_in = { k: test_data[index] for index, k in enumerate(FEATURES) }
print(test_data_in)

def predict_input_fn(data_set):
    feature_cols = { k: tf.reshape(tf.constant(data_set[k], dtype=tf.float32), [-1]) for k in FEATURES }
    return feature_cols

predictions = estimator.predict(input_fn=lambda: predict_input_fn(test_data_in))
print(list(predictions))

我查看了this 问题,但找不到与我的问题相关的解决方案。为什么 TensorFlow 会显示此警告,我该如何消除它?

【问题讨论】:

标签: python machine-learning tensorflow


【解决方案1】:

在他们改变这个警告的行为之前,这里有一个快速补丁来抑制它:

tf.estimator.Estimator._validate_features_in_predict_input = lambda *args: None

在导入tensorflow 后包含这一行。

它不应该有任何意外的副作用,但如果你想说服自己,请查看source code

【讨论】:

    【解决方案2】:

    我也中了这个,阅读线程https://github.com/tensorflow/tensorflow/issues/11621

    我认为你的程序是完全正确的,它是错误的警告:)。它是在 Datasets API 存在之前很久就添加的,并且是出于好意。 (AFAICT predict() API 依赖于您的输入以 tf.errors.OutOfRangeError 终止,并且在 Datasets 存在之前,只有基于 QueueRunner 的管道会以这种方式终止,因此如果不存在队列运行器,这可能是一个错误。) @xiejw 我们应该删除这个警告,还是有更巧妙的方法来检测错误情况?

    希望他们会在不必要时消除错误。

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误。但是,为了查看预测中的值(逐行),我使用了__next__() 运算符。 因此,显示下一个直接行的代码是:print(predictions.__next__)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        • 2021-12-27
        • 2021-06-06
        • 2020-07-22
        • 1970-01-01
        • 2020-07-26
        相关资源
        最近更新 更多