Python中的多重处理可同时训练神经网络

我有遗传算法,可以为我执行超参数搜索神经网络。我有10代,每代产生20个神经网络。但是现在,对于每一代人来说,我一次都在训练一个网络。因此,这需要很长时间。相反,我尝试进行多处理,其中每代并行训练所有20个神经网络。但是,当我这样做时,我的神经网络信息不会被更新。这就是我一步一步训练20个神经网络的工作:

def train_networks(networks,dataset):
    """Train each network.
    Args:
        networks (list): Current population of networks
        dataset (str): Dataset to use for training/evaluating
    """


    print('training each network')
    pbar = tqdm(total=len(networks))
    for network in networks:
        print('training network - inside loop')
        network.train(dataset)
        pbar.update(1)
    pbar.close()
    print('done training')

我想在这里使用多重处理。对于多处理,我执行了以下操作:

def train_networks(networks,dataset):
    """Train each network.
    Args:
        networks (list): Current population of networks
        dataset (str): Dataset to use for training/evaluating
    """


    for network in networks:
        p = multiprocessing.Process(target=network.train,args=(dataset,))
        p.start()
        p.join()

但这不起作用。如何修改代码,以便并行训练所有20个网络。帮助将不胜感激。

ssq1987312 回答:Python中的多重处理可同时训练神经网络

p.join()方法停止脚本的任何进一步执行,直到进程p完成。这是一种方法

processes = []
for network in networks:
   p = multiprocessing.Process(target=network.train,args=(dataset,))
   p.start()
   processes.append(p)

# Now you can wait for the networks to finish training before executing the 
# rest of the script

for process in processes:
   process.join()

Here's a nice resource on multiprocessing

本文链接:https://www.f2er.com/3157060.html

大家都在问