我有遗传算法,可以为我的神经网络进行超参数搜索。我有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个网络。我们将不胜感激。
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()
这里有一个关于多处理的好资源