我需要一些帮助来澄清某些术语,因为它适用于感知器的输入。一个名为“更新”的函数,“接收一个由输入列表和一维数组@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()
感谢。
答案 0 :(得分:0)
由于值是二维数组,例如mxn,因此data_point是行1,2,... m的索引。因此值[data_point]返回第一行中的元素,即[3,2,1]。 您还可以通过以下方式验证 在模型中,我们必须为每一行整体训练一个模型,并计算将用于更新权重的成本函数。 因为,您正在使用随机梯度下降,因此每个输入行都会更新权重