Я пытаюсь реализовать алгоритм обратного распространения, чтобы показать, как можно использовать двухуровневую нейронную сеть для работы в качестве логического элемента XOR.Я следовал этому уроку здесь .
После запуска я ожидаю, что результат будет соответствовать таблице логической истинности 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)