【问题标题】:Python simple backpropagation not working as expectedPython 简单的反向传播无法按预期工作
【发布时间】:2019-04-18 10:46:19
【问题描述】:

我正在尝试实现反向传播算法,以展示如何使用两层神经网络来充当 XOR 逻辑门。我跟着这个教程here

运行后,我期望输出遵循XOR逻辑真值表:

[[0]
 [1]
 [1]
 [0]]

但是我得到:

output after training:  [[0.5]
 [0.5]
 [0.5]
 [0.5]]

关于我可能做错的任何建议?谢谢


完整代码:

import numpy as np


# Sigmoid function
def sigmoid(x, deriv=False):
    if deriv:
        return x*(1-x)
    return 1/(1+np.exp(-x))


# Input dataset
X = np.array([[0, 0],
              [0, 1],
              [1, 0],
              [1, 1]])

# Output dataset
y = np.array([[0, 1, 1, 0]]).T

# seed random numbers to make calculation deterministic
np.random.seed(1)

# initialise weights randomly with mean 0
syn0 = 2*np.random.random((2, 1)) - 1

for iter in range(10000):

    # forward prop
    layer0 = X
    layer1 = sigmoid(np.dot(layer0, syn0))

    layer1_error = y - layer1

    layer1_delta = layer1_error * sigmoid(layer1, True)

    syn0 += np.dot(layer0.T, layer1_delta)
    print(iter)

print("output after training: ", layer1)

【问题讨论】:

    标签: python neural-network backpropagation


    【解决方案1】:

    你没有做错任何事——你正确地证明了单层 ANN 无法执行non-linear separation

    XOR 输入是非线性可分数据的一个示例 - 简单地说,如果将它们绘制在 x-y 网格上,则无法绘制直线来将“0”输出与“1”输出分开。单层人工神经网络只能进行线性分离,因此无论你如何训练它都无法产生正确的输出。

    要解决 XOR 问题,您需要添加一个额外的层。看起来你已经有了两层(输入层和输出层),但它实际上是一个单层网络,因为只有一层权重(syn0)。添加第二层(按照您提供的参考中的示例)并查看训练结果是否有所改善。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 2016-08-17
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多