用python并行训练两个keras模型

2024-10-02 14:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个可以并行训练两个Keras模型的函数。 我的函数是这样的:

def fit_function(index):
    'some code here'
     print('statrt fitting model1..')
     model_1.fit(X[index],y[index],epochs=1)
     print('statrt fitting model2..')
     model_2.fit(X[index],y[index],epochs=1)
     return

此外,我还使用python中的多处理库:

import multiprocessing
if __name__ == '__main__':
    jobs = []
    for i in range(0,n):
        p = multiprocessing.Process(target=fit_function, args=(i,))
        jobs.append(p)
        p.start()
        p.join()

运行此命令后,它将打印:“statrt fitting model1..”,这意味着它将开始运行 但是在这个输出之后,它什么也不做!程序不会停止,也不会给出结果

哪一部分我做错了?如果你能帮助我,我将非常感激


Tags: 函数模型indexmodeldefjobsfunctionmultiprocessing
1条回答
网友
1楼 · 发布于 2024-10-02 14:19:03

您的代码中存在多个不一致之处。通常,它有助于给出最小的可复制代码。如果你不知道你没有对你的模型做任何事情,你也需要检查你的CPU数量

下面是一个用不同数据并行训练分类器的最小示例。在这里,我假设您需要多个版本的模型,就像您编码的那样

from sklearn import svm
X = [ [[0, 0], [1, 1]], [[0, 0], [1, 1]] ]
y = [[0, 1], [1, 0] ]


def fit_function(index, return_models):
  print('statrt fitting model1..')
  print(index)
  clf = svm.SVC()
  clf.fit(X[index], y[index])
  return_models[index] = clf

import multiprocessing
if __name__ == '__main__':
  print(f'Number of cpus: {multiprocessing.cpu_count()}')
  jobs = []
  n = multiprocessing.cpu_count()

  manager = multiprocessing.Manager()
  return_models = manager.dict()

  for i in range(0,n):
    p = multiprocessing.Process(target=fit_function, args=(i, return_models))
    jobs.append(p)
    p.start()
    p.join()

  print(return_models)

相关问题 更多 >