我正在使用带有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多处理的用法吗?
答案 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).
从我的观点来看,这个解决方案非常难看,但它确实有效。我希望有人可以创造更优雅的一个并发布它:)。