对sklearn NN使用python多处理

时间:2016-06-29 11:32:02

标签: python machine-learning scikit-learn multiprocessing pool

我正在使用带有NN实现的开发版的Python sklearn包。 我的任务是用不同的输入数据和预测平均值训练4个NN

X_median = preprocessing.scale(data_median)
X_min = preprocessing.scale(data_min)
X_max = preprocessing.scale(data_max)
X_mean = preprocessing.scale(data_mean)

我创建了像这样的神经网络

NN1 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1)
NN2 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1)
NN3 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1)
NN4 = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic', algorithm='adam', alpha= 0 , max_iter = 40, batch_size = 10, learning_rate = 'adaptive', shuffle = True, random_state=1)

(标准sklearn功能)

我希望对上述数据集进行训练。 如果不使用池,我的代码将如下所示:

NN1.fit(X_mean,train_y)
NN2.fit(X_median,train_y)
NN3.fit(X_min,train_y)
NN4.fit(X_max,train_y)

当然,由于所有4个训练都是独立的,我想并行运行它们,我想我应该使用池来实现这个目标。但是,我完全不了解如何执行计算。我会假设写这样的东西:

pool = Pool()
pool.apply_async(NN1.fit, args = (X_mean, train_y))

然而,这不会产生任何结果,我甚至可以这样输入(只传递一个参数),程序将完成没有任何错误! pool.apply_async(NN1.fit, args = (X_mean,))

执行此类计算的正确方法是什么? 有人可以建议好的资源来理解Python多处理的用法吗?

1 个答案:

答案 0 :(得分:1)

最后我让它成功了)

我的解决方案基于answer。因此,首先创建两个帮助功能:

1)

def Myfunc(MyNN,X,train_y):
MyBrain.fit(X,train_y)
return MyNN

这只是为了提供所需的全局函数来提供池方法

2)

def test_star(a_b):
return Myfunc(*a_b)

这是it- help函数的关键部分,它采用1个参数并将其拆分为Myfunc所需的args数量。

然后只需创建

mylist = [(NN_mean,X_mean, train_y), (NN_median,X_median, train_y)]

并执行

NN_mean, NN_median = pool.map(test_star, my list).

从我的观点来看,这个解决方案非常难看,但它确实有效。我希望有人可以创造更优雅的一个并发布它:)。