【问题标题】:train two keras models in parallel in python在 python 中并行训练两个 keras 模型
【发布时间】:2020-04-23 09:24:07
【问题描述】:

我正在尝试构建一个可以并行训练两个 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()

运行后它会打印:'statrtfitting model1..' 这意味着它进入了功能 但是在这个输出之后,它什么也不做!程序不会停止,也不会给出结果。

我做错了哪一部分?如果您能帮助我,我将不胜感激。

【问题讨论】:

    标签: python keras parallel-processing python-multiprocessing


    【解决方案1】:

    您的代码中有多个不一致之处。通常,它有助于提供最少的可重现代码。如果您不知道自己没有对模型做任何事情,您还需要检查 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)
    

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      相关资源
      最近更新 更多