我有一个由ano.function()返回的函数,我想在多处理中使用它来加速。下面是一个简单的演示脚本,显示我遇到的问题:

import numpy as np
from multiprocessing import Pool
from functools import partial
import theano
from theano import tensor

def get_theano_func():
    x = tensor.dscalar()
    y = x + 0.1
    f = theano.function([x], [y])
    return f

def func1(func, x):
    return func(x)

def MPjob(xlist):
    f = get_theano_func()
    fp = partial(func1, func=f)
    pool = Pool(processes=5)
    Results = pool.imap(fp, xlist)
    Y = []
    for y in Results:
        Y.append(y[0])
    pool.close()
    return Y

if __name__ == '__main__':
    xlist = np.arange(0, 5, 1)
    Y = MPjob(xlist)
    print(Y)

在上述代码中,theano函数“f”作为输入参数馈送到“func1()”。如果MPjob()正确运行,它应该返回[0.1、1.1、2.1、3.1、4.1]。但是,引发了异常“TypeError:func1()获取了参数“func”的多个值。
完整的跟踪日志如下:
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
  File "C:\Python35\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
TypeError: func1() got multiple values for argument 'func'
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "F:/DaweiLeng/Code/workspace/Python/General/theano_multiprocess_debug.py", line 36, in <module>
    Y = MPjob(xlist)
  File "F:/DaweiLeng/Code/workspace/Python/General/theano_multiprocess_debug.py", line 29, in MPjob
    for y in Results:
  File "C:\Python35\lib\multiprocessing\pool.py", line 695, in next
    raise value
TypeError: func1() got multiple values for argument 'func'

有人知道吗?

最佳答案

原来它与partial()函数有关。完整的解释在这里https://github.com/Theano/Theano/issues/4720#issuecomment-232029702

关于python - 如何使用多处理并行处理Theano函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38321879/

10-11 23:19
查看更多