我正在使用带有 NN 实现的 Python sklearn 包的开发版本。 我的任务是使用不同的输入数据和预测的平均值来训练 4 个神经网络
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 多处理的用法吗?
最佳答案
终于成功了)
我的解决方案基于此 answer 。因此,首先创建两个帮助函数:
1)
def Myfunc(MyNN,X,train_y):
MyBrain.fit(X,train_y)
return MyNN
这只是为了让所需的函数成为 feed 池方法的全局函数
2)
def test_star(a_b):
return Myfunc(*a_b)
这是它的关键部分 - 帮助函数接受 1 个参数并将其拆分为 Myfunc 所需的所需参数数量。
然后创建
mylist = [(NN_mean,X_mean, train_y), (NN_median,X_median, train_y)]
并执行
NN_mean, NN_median = pool.map(test_star, my list).
从我的角度来看,这个解决方案非常丑陋,但它确实有效。我希望有人可以创建更优雅的一个并将其发布:)。
关于python - 使用 python 多重处理进行 sklearn NN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098316/