【问题标题】:Custom input function for estimator instead of tf.data.dataset估计器的自定义输入函数而不是 tf.data.dataset
【发布时间】:2019-04-16 11:25:45
【问题描述】:

我想知道是否有人为 tensorflow 的估计器创建了自己的自定义输入函数?喜欢 (link) 这个图片:

这里说推荐使用tf.data.dataset。但我不想使用那个,因为我想编写自己的迭代器,它可以批量生成数据并对其进行洗牌。

    def data_in(train_data):
      data = next(train_data)
      ff = list(data)
      tf.enable_eager_execution()
      imgs = tf.stack([tf.convert_to_tensor(np.reshape(f[0], [img_size[0], img_size[1], img_size[2]])) for f
                                        in ff])
      lbls = tf.stack([f[1] for f in ff])
      print('TRAIN data: %s %s ' % (imgs.get_shape(), lbls.get_shape()))
      return imgs, lbls

输出:TRAIN data: (10, 32, 32, 3) (10,)

其中 train_data 是一个生成器对象,它基本上使用 iter 和 np.reshape(f[0], [img_size[0], img_size2, img_size2] 遍历我的数据集将我提取的数据重新整形为所需的尺寸,它是整个数据集的一批。我使用堆栈将张量列表转换为堆叠张量。但是当我将它与估计器一起使用时,我得到提供给的功能的错误模型说这些特征没有 get_shape()。当我在没有估计器的情况下对其进行测试时,它运行良好,并且 get_shape() 也运行良好。

【问题讨论】:

  • 您分享的示例文档实际上并未演示如何使用该功能。也许您可能需要在输入估算器之前使用 numpy_input_fn 包装您的函数?
  • 嗨,kvish,谢谢您的回复:)。好吧,我为 imgs 和 lbls 获得的数据已经分批了,所以使用 numpy_input_fn 对我没有用。因为它需要整个数据集,然后从中读取批次。

标签: python tensorflow deep-learning tensorflow-estimator


【解决方案1】:

嘿,kvish,我想出了怎么做。我只需要添加这些行

experiment = tf.contrib.learn.Experiment(
cifar_classifier,
train_input_fn=lambda: data_in(),
eval_input_fn=lambda: data_in_eval(),
train_steps=train_steps)

我知道实验已被弃用,我现在也将使用估算器进行此操作:)

【讨论】:

  • 这很好。我希望他们有更好的文档。特别是用于自定义 Estimator 管道!
  • 我今天进一步检查了它,不幸的是它没有按照我的预期工作。 tf.estimator.trainandevaluate() 调用一次训练。我不确定估计器是否在每批之后都调用 train_input_fn。你知道我是否可以检查是否正在加载不同的批次吗? (通常在训练期间我的 GPU 总是加载数据)
  • 我刚刚检查了估算器的源代码并参考了那里的一些文档。 “Estimator 的调用方法将在启用急切执行时起作用。但是,model_fninput_fn 不会急切执行。Estimator 将在调用所有用户提供的函数(包括钩子)之前切换到图形模型,因此他们的代码必须与图形模式执行兼容。请注意,使用 tf.datainput_fn 代码通常在图形模式和急切模式下都可以工作“据我所知,您正在函数内部进行急切执行,所以也许这个有问题吗?
  • 嘿@kvish 谢谢你的回复,我也试过了,没有急于执行。但它仍然没有进行下一批。我想它需要在数据读取期间构建图表,我没有这样做,因为估算器是高级 API,并且无法让用户访问图表。
  • 我阅读了有关 Estimators 的论文,他们在其中提到我无法访问图表,并且来自 tf 的迭代器也使用图表。所以简而言之,我不得不使用 tf.data 类,仅此而已。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 2013-12-24
相关资源
最近更新 更多