【问题标题】:TensorFlow estimator.predict: Saving when as_iterable=TrueTensorFlow estimator.predict:当 as_iterable=True 时保存
【发布时间】:2016-10-18 00:29:19
【问题描述】:

我已修改 Wide and Deep tutorial(运行 python 2.7)以使用回归器而不是分类器,并输出我的测试数据的预测。我目前这样做(将 numpy 导入为 np):

predicts = m.predict(input_fn=lambda: input_fn(df_test))
np.savetxt("predict.csv", predicts, delimiter=",")

在最新的 r0.11 版本中,我收到关于即将弃用的警告,其中返回值将是可迭代的。为了适应这种情况,我尝试了以下方法:

predicts = m.predict(input_fn=lambda: input_fn(df_test), as_iterable=True)
np.savetxt("predict.csv", list(predicts), delimiter=",")

这没有达到预期的效果。 CPU 达到了大约 80% 并保持这种状态,似乎是无限期的。半小时后,我终于不得不在没有写入数据的情况下将其杀死。它想做什么?

关于当以as_iterable=True 返回时如何将这些预测输出到文本文件的任何建议?

更新: 我试过这个:

predicts = m.predict(input_fn=lambda: input_fn(df_test), as_iterable=True)  
with open("predict.csv", "w") as f:
    for x in predicts:
      f.write(str(x)+"\n")

结果似乎是一样的。我怀疑这是一个错误。谁能证实这一点?

【问题讨论】:

    标签: python numpy tensorflow


    【解决方案1】:

    使用as_iterableinput_fn 有点危险:如果 input_fn 不是每次都抱怨新数据用完,那么 as_iterable 会很高兴地产生越来越多的输出,通常会一遍又一遍地运行相同的输入。

    如果你看Wide and Deep教程中的input_fn,你会发现里面没有队列,数据直接放入常量中。因此,无论您多久使用该 input_fn 创建的张量,您都将始终获得数据。

    只要获得新数据,as_iterable 就会提取输入。在这种情况下,这意味着永远。

    这是一个错误,我们应该修复它。

    【讨论】:

    • 感谢您的回复。我没有改变输入行为,所以这很可能是正在发生的事情。现在我将使用硬as_iterable=False,但我会研究排队和/或如何使它与不同于 input_fn 的方案一起工作。
    • 即将解决此问题:我们将检测您是否在 input_fn 中没有任何队列,如果找不到任何队列,我们​​将在一次调用后停止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多