代码1
def feedforward(self,d):
out = []
for neuron in self.layer:
out.append(neuron.feedforward(d))
return np.array(out)
这是我编写的用于执行前馈的原始代码。我想通过使用多线程来提高执行速度,因此编辑了代码以使用concurrent.futures
模块中的ThreadPoolExecutor
代码2
def parallel_feedforward(self,func,param):
return func.feedforward(param)
def feedforward(self,d):
out = []
with ThreadPoolExecutor(max_workers = 4) as executor:
new_d = np.tile(d,(len(self.layer),1))
for o in executor.map(self.parallel_feedforward,self.layer,new_d):
out.append(o)
return np.array(out)
变量d
是一个向量,我使用了np.tile()
来使executor.map
正确接受输入。
在测试两者执行速度后,我发现代码1明显比代码2快得多(代码2慢了近8-10倍)。但是,使用多线程的代码不应该比循环更快吗?这是因为我编写的代码有误还是其他原因导致的。如果是我的代码有问题,请问哪里错了?
提前感谢您的帮助。