Как мне распараллелить это с помощью многопроцессорной обработки Python? - PullRequest
0 голосов
/ 19 мая 2018

В Python я кодировал классификатор 1 против отдыха, который обучает 11 различных классификаторов, по одному для каждого класса.Код показан ниже:

def onevsrest(X_train,y_train,lamb):
    beta=[]
    beta_init=np.zeros(X_train.shape[1])
    for i in range(1,12):
        print(i)
        y=np.copy(y_train)
        y[y != i] = -1
        y[y == i] = 1
        beta_temp,objs = svm(lamb, 0.1, 200, X_train, y)
        beta.append(beta_temp[-1])
    return beta

Как бы я распараллелил вышеописанную программу, используя многопроцессорный модуль Python?Насколько я понимаю, многопроцессорность может использоваться только для кода с одним аргументом.Как бы я масштабировал это к этой функции, которая принимает несколько аргументов?

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вы также можете использовать кортеж , например:

from multiprocessing import Pool

def f(data):
    x, y = data
    return x*y

if __name__ == '__main__':
    with Pool(5) as p:
        X = (1,2,3)
        Y = (1,4,9)
        print(p.map( f, list(zip(X,Y)) )) # returns [1, 8, 27]
0 голосов
/ 19 мая 2018

Вы можете «частично» выполнить свою функцию.Пример:

# multiple arguments function
def calc(a, b, c):
    return a + b + c

# prepare a single argument partial function, freezing `b` and `c`
from functools import partial
calc2 = partial(calc, b=3, c=7)

from multiprocessing import Pool
p = Pool(5)
print(p.map(calc2, [1, 2, 3, 4, 5, 6]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...