多处理以构建单个微型批处理(Keras-TF后端)

时间:2019-02-01 02:36:29

标签: dictionary tensorflow keras multiprocessing pathos

Keras API中,可以选择使用Sequence在多进程模式下生成迷你批。但是,单个小批量的生成仍然是一个单一的过程:即,需要一次循环浏览一组固定的示例(大小为BATCH_SIZE),并在需要时执行数据扩充,并填充输入和顺序输出张量。我正在尝试使用几个工作人员执行该步骤,其中:每个工作人员加载图像并执行扩充。在一个玩具示例(此处未显示)上,多过程方法花费了循环方法一半的时间来构建单个小批量生产。

我想找到一种比全局变量更好的方法,以便在不同进程之间共享数据。下面是一个玩具示例:

from pathos.multiprocessing import ProcessingPool as Pool
import time

VALUES = range(10000)

class BlockingMap:
    def __init__(self):
        pass

    def square(self, idx):
        item = VALUES[idx]
        return item * item

    def run(self, list_ids):
        pool = Pool()
        result = pool.map(self.square, list_ids)
        pool.close()
        return result

if __name__ == '__main__':
    BATCH_SZ = 32
    batch_id = 0
    list_ids = VALUES[batch_id * BATCH_SZ:(batch_id + 1) * BATCH_SZ]
    mm = BlockingMap()
    init = time.time()
    res = mm.run(list_ids)
    print("Elapsed Time Blocking Map ", time.time() - init)
    print("Examples {} | Valid {}".format(BATCH_SZ, res))

0 个答案:

没有答案