0

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

在下面的代码中,“values[datapoint]”对输入指的是什么:

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

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

“数据点”是否等于“[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()

谢谢。

4

1 回答 1

0

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

于 2018-04-30T05:04:38.380 回答