【问题标题】:How to use StreamingDataFeeder as contrib.learn.Estimator.fit()'s input_fn?如何使用 StreamingDataFeeder 作为 contrib.learn.Estimator.fit() 的 input_fn?
【发布时间】:2016-10-04 14:48:47
【问题描述】:

我最近开始使用tensorflow.contrib.learn (skflow) 库并且非常喜欢它。但是,我在使用 Estimator 时遇到了问题,fit 函数使用了

  1. XYbatch_size) - 这种方法的问题在于它不支持指定时期数和允许任意数据源的规定。
  2. input_fn - 此外,设置时期,它让我在训练来源(在我的情况下直接来自数据库)方面更加灵活。

现在我知道我可以创建读取文件的 input_fn,但是,由于我对处理文件不感兴趣,以下函数对我没有用 -

  • tf.contrib.learn.read_batch_examples
  • tf.contrib.learn.read_batch_features
  • tf.contrib.learn.read_batch_record_features

理想情况下,我想使用StreamingDataFeeder 作为 input_fn。有什么想法可以实现吗?

【问题讨论】:

标签: tensorflow skflow


【解决方案1】:

StreamingDataFeeder 用于将迭代器作为x / y 提供给fit/predict/evaluateEstimator

例子:

x = (np.array([i]) for i in xrange(10**10)) # use range for python >=3.0
y = (np.array([i + 1]) for i in xrange(10**10))
lr = tf.contrib.learn.LinearRegressor(
    feature_columns=[tf.contrib.layers.real_valued_column('')])

# only consumes 1000*10 values from iterators.
lr.fit(x, y, steps=1000, batch_size=10)

如果您想使用input_fn 提供数据 - 您需要使用图形操作来读取/处理数据。例如,您可以创建一个 C++ 操作来生成您的数据(它可以是侦听端口或从数据库操作读取)并转换为Tensor。这主要适用于从文件中读取数据,但也可以实现其他读取器。

【讨论】:

  • 感谢您的回复。我想实现我自己的阅读器。但我不知道从哪里开始。你能指出我正确的方向吗?
  • 这里是 TFRecordReader 实现 - github.com/tensorflow/tensorflow/blob/master/tensorflow/core/… 即您需要实现一个继承自 ReaderBase 的类和一个您可以在输入函数中调用的 Op。
猜你喜欢
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多