从迭代器创建`input_fn`

Man*_*idt 6 python tensorflow

大多数教程都关注整个训练数据集适合内存的情况.但是,我有一个迭代器,它充当(特征,标签)-tuples的无限流(在运行中便宜地创建它们).

在实现input_fnfor tensorflows 估算器时,我可以从迭代器返回一个实例

def input_fn():
   (feature_batch, label_batch) = next(it)
   return tf.constant(feature_batch), tf.constant(label_batch)
Run Code Online (Sandbox Code Playgroud)

或者input_fn必须在每次通话时返回相同的(功能,标签) - 元组?

此外,在训练期间多次调用此函数,因为我希望它类似于以下伪代码:

for i in range(max_iter):
   learn_op(input_fn())
Run Code Online (Sandbox Code Playgroud)

P-G*_*-Gn 3

的参数input_fn在整个训练过程中使用,但函数本身被调用一次。因此,创建一个超出教程input_fn中所解释的返回常量数组的复杂对象并不那么简单。

input_fnTensorflow为numpypanda数组提出了两个这样的例子,但它们是从内存中的数组开始的,所以这不能帮助您解决问题。

您还可以通过上面的链接查看他们的代码,了解他们如何实现高效的非平凡的input_fn,但您可能会发现它需要更多您想要的代码。

如果您愿意使用 Tensorflow 的较低级别接口,恕我直言,事情会更简单、更灵活。有一个教程涵盖了大多数需求,并且建议的解决方案很容易(呃)实施。

特别是,如果您已经有一个可以返回问题中所描述的数据的迭代器,那么使用占位符(上一个链接中的“馈送”部分)应该很简单。

  • 我本以为从迭代器/可迭代器提供网络是标准用例,而不是例外。 (3认同)