0

我正在编写我自己的神经网络(用于学习目的,不是真正使用),我目前处于模型选择阶段,我用一组参数交叉验证我的 NN。我目前正在使用 for 循环遍历numpy数组reg_range

def model_selection(nn, trainX, trainY, reg_range, k_folds=5):
    # reg_range = the range of regularization parameters to search over
    res = []
    for i, reg in enumerate(reg_range):
        print "Testing", i+1, "/", len(reg_range), "parameters"
        nn.reset()
        res.append(cross_validation(nn, trainX, trainY, reg=reg, k_folds=k_folds))
    return res

mod_sel = model_selection(nn1, trainX, trainY, reg_params)

cross_validation函数返回一个 1D numpy.array,具有每次 CV 运行的准确性。我怎样才能并行化这段代码并且仍然有mod_sel相同的顺序reg_params?我有兴趣看看如何使用multiprocessing库以及使用IPython.

希望这很清楚,我试图省略(至少在我看来)代码的不相关部分。

4

1 回答 1

1

这是解决方案的样子multiprocessing。由于您似乎在 cross_validation 期间改变了您的 nn,您要么想要clone()在您的 nn 上创建一个方法,就像我在我的答案中打断的那样,或者您想要将 cross_validation 更改为不发生变异。我不得不对如何reset()工作做出一些假设。

import multiprocessing
import functools

def model_selection(nn, trainX, trainY, reg, k_folds=5):
    nn = nn.clone() # since you seem to be mutating this 
                    # you are going to want to copy it and mutate the copy instead
    return cross_validation(nn, trainX, trainY, reg=reg, k_folds=k_folds))

nn1.reset()
pool = multiprocessing.Pool(processes=5)
f = functools.partial(model_selection, nn1, trainX, trainY)
model_sel = pool.map(f, reg_params)
于 2013-11-14T06:24:48.790 回答