Python多线程径向基函数

时间:2013-03-03 10:24:21

标签: python multithreading artificial-intelligence multiprocessing

所以我需要让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的值,这意味着一次只有一个线程可以更改它们。

任何人都有任何想法如何做到这一点?

这在小型数据集上效果很好,但在使用真实数据时会有点毛茸茸

2 个答案:

答案 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.pointyself.weightsg.points是1d numpy数组。

答案 1 :(得分:0)

Python多线程在一个CPU核心上的单个进程中运行所有线程。

要运行真正的并行线程,您应该使用multiprocessing库。