Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数并行化问题(LSTM模型)_Python_List_Function_Parallel Processing - Fatal编程技术网

Python 函数并行化问题(LSTM模型)

Python 函数并行化问题(LSTM模型),python,list,function,parallel-processing,Python,List,Function,Parallel Processing,我有一个名为fit_model的函数,它接受一个输入,dataset,对数据集执行一些预处理操作,并对其运行一个LSTM模型,最后返回一个数字。简单地说如下: def fit_model(dataset): do some preprocess on the dataset train the model on the dataset return a number import multiprocessing as mp results = [] pool =

我有一个名为
fit_model
的函数,它接受一个输入,
dataset
,对数据集执行一些预处理操作,并对其运行一个LSTM模型,最后返回一个数字。简单地说如下:

def fit_model(dataset):
    do some preprocess on the dataset
    train the model on the dataset

    return a number
import multiprocessing as mp

results = []

pool = mp.Pool(mp.cpu_count())
results = pool.starmap(fit_model, [(my_list[i]) for i in range(0, 21)])
pool.close()
我还有一个名为
my_list
的列表,其中包含21个数据集(每个数据集都以数据帧的形式)。
当我想将函数并行化时,如下所示:

def fit_model(dataset):
    do some preprocess on the dataset
    train the model on the dataset

    return a number
import multiprocessing as mp

results = []

pool = mp.Pool(mp.cpu_count())
results = pool.starmap(fit_model, [(my_list[i]) for i in range(0, 21)])
pool.close()
我得到这个错误:

"""
Traceback (most recent call last):
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 47, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
TypeError: fit_model() takes 1 positional argument but 44 were given
"""
但我不知道有什么问题?
同样,当我像这样运行函数时:
x=fit\u model(我的列表[4])
,或(0,21)范围内的任何其他索引,我没有收到任何错误。


您能帮我解决这个问题吗?

我认为您遇到的问题是如何实现starmap调用。此命令表示您正在尝试创建一个单独元组的列表,这些元组将作为它们自己的iterables:

[(my_list[i]) for i in range(0, 21)] # recreates your list [val 1, val 2, val 3, ...]
但是,这会再次生成初始列表。您可以使用一个尾随逗号来修复它,它确实创建了我认为您正在尝试创建的内容,如:

[(my_list[i], ) for i in range(0, 21)] # creates [(val 0), (val 1), (val 2) ...]
然而,这只是为您创建额外的代码,而我认为它根本不需要。我建议您使用地图而不是星图,如下所示:

import multiprocessing as mp
# no need to define results 
pool = mp.Pool(mp.cpu_count())
results = pool.map(fit_model, my_list)
pool.close()
或者在我看来,是一种更像蟒蛇的方式:

import multiprocessing as mp

with mp.Pool(mp.cpu_count()) as pool:
    results = pool.map(fit_model, my_list)