用于输入感知器的值的数组

时间:2018-03-10 20:41:13

标签: python arrays perceptron datapoint

我需要一些帮助来澄清某些术语,因为它适用于感知器的输入。一个名为“更新”的函数,“接收一个由输入列表和一维数组@param列组成的二维数组@param值,由相应的预期输出列表组成”

在下面的代码中,“值[datapoint]”指的是输入:

np.array([[3,2,1],[4,0,-1]])..."

在最后一个名为“test()”的函数的代码中查看下面这段代码的完整上下文,它以“p2.updat ...”开头,基本上,它使用此数组调用函数“update()”部分投入。

“datapoint”是否等于“[3,2,1]”还是只指那个数组中的一个元素,如“3”?

import numpy as np

class Perceptron:

    def __init__(self, weights = np.array([1]), threshold = 0):  
        self.weights = weights.astype(float) 
        self.threshold = threshold

    def activate(self, values):       
        strength = np.dot(values,self.weights)       
        return int(strength > self.threshold)

    def update(self, values, train, eta=.1):   
        for data_point in xrange(len(values)):        
           prediction = self.activate(values[data_point])
           error = train[data_point] - prediction
           weight_update = eta * np.dot(values[data_point], error)
           self.weights += weight_update

   def test():
       def sum_almost_equal(array1, array2, tol = 1e-6):
           return sum(abs(array1 - array2)) < tol

       p1 = Perceptron(np.array([1,1,1]),0)
       p1.update(np.array([[2,0,-3]]), np.array([1]))
       assert sum_almost_equal(p1.weights, np.array([1.2, 1, 0.7]))

       p2 = Perceptron(np.array([1,2,3]),0)
       p2.update(np.array([[3,2,1],[4,0,-1]]),np.array([0,0]))
       assert sum_almost_equal(p2.weights, np.array([0.7, 1.8, 2.9]))

       p3 = Perceptron(np.array([3,0,2]),0)
       p3.update(np.array([[2,-2,4],[-1,-3,2],[0,2,1]]),np.array([0,1,0]))
       assert sum_almost_equal(p3.weights, np.array([2.7, -0.3, 1.7]))

   if __name__ == "__main__":
       test()

感谢。

1 个答案:

答案 0 :(得分:0)

由于值是二维数组,例如mxn,因此data_point是行1,2,... m的索引。因此值[data_point]返回第一行中的元素,即[3,2,1]。 您还可以通过以下方式验证 在模型中,我们必须为每一行整体训练一个模型,并计算将用于更新权重的成本函数。 因为,您正在使用随机梯度下降,因此每个输入行都会更新权重