在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))