2016-07-12 17 views
2

私はtheano.function()によって返された関数を持っています、そして、私はそれを高速化のためにマルチプロセッシングで使いたいと思います。以下は、私が問題に実行する場所を示すために簡略化されたデモ・スクリプトである:上記のコードでマルチプロセスを使ってTheano関数を並列化する方法は?

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' 

誰でもヒントを得ましたか。

答えて

関連する問題