Perceptron没有正确训练 - 循环错误?

时间:2017-12-01 18:09:35

标签: python arrays for-loop enumerate perceptron

我正在尝试在python中实现一个简单的感知器,它能够将逻辑函数分类为OR或AND。

Example AND-gate

我在python中有以下代码:

偏差是每个输入向量中的第三个条目。有一个行向量'targets',其中包含'正确'值,标签:

问题是权重无法正确更新。它们仍然是随机的,这告诉我没有任何东西真正受到训练。

inputs = np.array([
[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1],
])
targets = np.array([0,0,0,1])

def step_function(x):
    return 1 * (x>=0)

def train(x,y):
    rate = 0.1
    trials = 10
    errors = []
    w = np.random.rand(len(inputs[0]))

    for t in range(trials):
        for i, x in enumerate(inputs):

            actual = np.dot(inputs[i], w)
            desired = targets[i]
            error = desired - step_function(actual)

            if error != 0:
                errors.append(error)
                w += rate * error * inputs[i]

    return w

w = train(inputs, targets)
print(w)

1 个答案:

答案 0 :(得分:0)

您的功能step_function不正确。您可以跳过该功能,只需更改:

#this
error = desired - step_function(actual)
#to
error = desired - actual

结果不会是完美的1和0,但会做我认为你瞄准的工作。在将来,你可以使用sigmoid函数或其他东西来尝试使结果更接近0和1。