【问题标题】:Perceptron not training correctly - error in loop?感知器没有正确训练 - 循环错误?
【发布时间】:2017-12-01 18:09:34
【问题描述】:

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

我在 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)

【问题讨论】:

    标签: python arrays for-loop enumerate perceptron


    【解决方案1】:

    您的函数step_function 不正确。您可以跳过该功能并进行更改:

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

    结果不会是完美的 1 和 0,但会完成我认为您所针对的工作。将来您可以使用 sigmoid 函数或其他方法来尝试使结果更接近 0 和 1。

    【讨论】:

      猜你喜欢
      • 2016-03-02
      • 2021-09-07
      • 1970-01-01
      • 2020-01-19
      • 2016-01-12
      • 2013-12-23
      • 2013-01-03
      • 2017-05-10
      • 2014-11-04
      相关资源
      最近更新 更多