【发布时间】:2020-01-12 10:25:15
【问题描述】:
我有一个自定义 keras.utils.sequence,它以特定(和关键)顺序生成批次。
但是,我需要跨多个内核并行化批量生成。名称'OrderedEnqueuer'是否暗示结果队列中批次的顺序保证与原始keras.utils.sequence的顺序相同?
我认为这个顺序不能保证的原因:
- OrderedEnqueuer 在内部使用 python
multiprocessing的apply_async。 - Keras 的文档明确表示
OrderedEnqueuer保证不会重复批次 - 但不能保证顺序。
我认为是这样的原因:
- 名字!
- 我知道
keras.utils.sequence对象是可索引的。 - 我在 Keras 的 github 上找到了似乎旨在验证顺序的测试脚本 - 尽管我找不到任何关于这些是否通过或它们是否真正具有决定性的文档。
如果这里的订单不能保证,我欢迎任何关于如何在保证订单的同时并行化批处理准备的建议,但前提是它必须能够并行化任意 python 代码 - 我相信例如 tf.data.Dataset API 可以不允许这样做(tf.py_function 回调原始 python 进程)。
【问题讨论】: