一般来说,我可以通过三种方式来考虑在TF中读取自定义数据:
有人可以详细说明(1)和(2)之间的区别(主要从性能/效率的角度来看)的优缺点,所以我可以使用队列跑步者。
我的感觉说(1)应该是最有效和最强大的方式。但是,除非我共享或公关代码而其他用户必须编译,否则该解决方案将无法移植。鉴于(2)和(3)是便携式的,对吧?
我还在GitHub上打开了一个功能请求“LMDB Reading Feature”问题,该问题被误解并作为问题关闭。
更新
TensorFlow没有本地读者:https://github.com/tensorflow/tensorflow/pull/9950
答案 0 :(得分:1)
(2)和(3)两者都受到Python的GIL的影响;最终你可能会锁定。因此,实现的速度也较慢,因为它不是图形内的,并且很难正确并行化。它既快捷又简单,但也不是最理想的。所以,去1去亲;
我还发现(1)有两个解决方案:
(1A)在来源中实施自定义操作。
如果您希望您的操作系统在质量许可的某个时刻以最终的Tensorflow源代码结束,这就是这种方式。
(1B)实施独立的自定义操作
事实证明这非常容易携带。您可以编译自己的.cc代码,并通过Python注册它。无需重建源代码:https://www.tensorflow.org/extend/adding_an_op