所以我需要让Radial Basis Function运行得更快
while(error):
epoch += 1
error = 0
for i in xrange(self.numPoints):
dp = self.dotProduct(g[i], self.weights)
signum = self.sig(dp)
if dp < 0 and g[i].classification == 1:
self.updateWeights(signum, g[i])
error += 1
elif dp > 0 and g[i].classification == -1:
self.updateWeights(signum, g[i])
error += 1
elif dp == 0:
self.updateWeights(signum, g[i])
error += 1
if epoch > 10000:
return 0
print "Epochs %i, %i Dimensions" % (epoch, self.numWeights - 1)
return 1
def dotProduct(self, x, y):
ret = 0.0
for i in xrange(len(y)):
ret += x.points[i]*y[i]
return ret
def sig(self, x):
if x < 0:
return 1
if x > 0:
return -1
else:
return 0
def updateWeights(self, s, g):
for i in xrange(self.numWeights):
self.weights[i] = self.weights[i] + self.learningRate * s * g.points[i]
我想使用并发线程,但python线程会锁定线程,直到前一个线程完成,所以它不会使运行单个主线程的速度更快。
我需要找到一种同时运行线程的方法,每个线程都有一个线程: for x in xrange(self.numPoints): 但是锁定self.weights的值,这意味着一次只有一个线程可以更改它们。
任何人都有任何想法如何做到这一点?
这在小型数据集上效果很好,但在使用真实数据时会有点毛茸茸
答案 0 :(得分:2)
您可以使用numpy数组来提高性能,例如:
import numpy as np
def dotProduct(self, x, y):
return np.dot(x.point, y)
def updateWeights(self, s, g):
self.weights += self.learningRate * s * g.points
其中x.point
,y
,self.weights
,g.points
是1d numpy数组。
答案 1 :(得分:0)
Python多线程在一个CPU核心上的单个进程中运行所有线程。
要运行真正的并行线程,您应该使用multiprocessing库。