Tensorflow中的自定义数据读取器(LMDB)

时间:2016-09-16 07:26:23

标签: tensorflow

一般来说,我可以通过三种方式来考虑在TF中读取自定义数据:

  1. 原生实施/自定义数据读取器 https://www.tensorflow.org/versions/r0.10/how_tos/new_data_formats/index.html
  2. Python函数包装 https://www.tensorflow.org/versions/r0.9/api_docs/python/script_ops.html
  3. 占位符 我已经成功实现了这一点。但我想要一个像(1)或(2)那样的图形内解决方案。
  4. 有人可以详细说明(1)和(2)之间的区别(主要从性能/效率的角度来看)的优缺点,所以我可以使用队列跑步者。

    我的感觉说(1)应该是最有效和最强大的方式。但是,除非我共享或公关代码而其他用户必须编译,否则该解决方案将无法移植。鉴于(2)和(3)是便携式的,对吧?

    我还在GitHub上打开了一个功能请求“LMDB Reading Feature”问题,该问题被误解并作为问题关闭。

    更新

    TensorFlow没有本地读者:https://github.com/tensorflow/tensorflow/pull/9950

1 个答案:

答案 0 :(得分:1)

(2)(3)两者都受到Python的GIL的影响;最终你可能会锁定。因此,实现的速度也较慢,因为它不是图形内的,并且很难正确并行化。它既快捷又简单,但也不是最理想的。所以,去1去亲;

我还发现(1)有两个解决方案:

(1A)在来源中实施自定义操作。

如果您希望您的操作系统在质量许可的某个时刻以最终的Tensorflow源代码结束,这就是这种方式。

(1B)实施独立的自定义操作

事实证明这非常容易携带。您可以编译自己的.cc代码,并通过Python注册它。无需重建源代码:https://www.tensorflow.org/extend/adding_an_op