Обратное распространение делает вывод в среднем до 0,5
У меня есть модель нейронной сети, над которой я работаю в Python. Обратное распространение, похоже, не работает, и я некоторое время возился с этим. Через кучу тренировок результат будет в среднем до 0,5 даже при наличии адекватных данных. Вот код для обратного распространения и данных, просто вывод "И": data:
data = [[[1, 1], 1],
[[1, 0], 0],
[[0, 1], 0],
[[0, 0], 0]]
backprop:
def backpropagate(self, input, output, learning_rate=0.2):
expected = self.feed_forward(input) # expected output
state = self.feed_full(input)
error = output - expected # error
delta = error * self.activation_function(expected, True)
for weight_layer in reversed(range(len(self.weights))):
error = delta.dot(self.weights[weight_layer].T) # updating error
delta = error * self.activation_function(state[weight_layer], True) # updating delta for each layer
self.weights[weight_layer] += np.transpose(state[weight_layer]).dot(delta) * learning_rate
подача вперед для всех состояний и просто вывод:
def feed_forward(self, x):
ret = x
for weight_layer in self.weights:
ret = self.activation_function(np.dot(ret, weight_layer))
return ret
def feed_full(self, x):
state = x
activations = [x]
for weight_layer in self.weights:
state = self.activation_function(np.dot(state, weight_layer))
activations.append(state)
return activations
форма сети [2, 3, 1], я пытаюсь спроектировать ее так, чтобы форма была расширяемой, чтобы я могла использовать ее для других проектов. Просто нужна обратная часть. Благодарю.