У меня есть простая нейронная сеть, которая принимает 3 входа для получения 1 выхода. У меня есть алгоритм обратного распространения, который я использовал для обучения сети. Кажется, что это работает для сетей с 1 и 2 слоями, но для сетей с 3 слоями я всегда получаю вывод 0,5, независимо от ввода.
Я сам вывел алгоритм из книги Майкла Нильсена, а также Джеймса Лояблог. Он работает для 1 и 2 слоев, но я не могу найти информацию в Интернете о том, почему он не будет работать больше.
def backprop(self):
# application of the chain rule to find derivative of the loss function with respect to weights
output_error = 2 * (self.y - self.output) * sigmoid_derivative(self.output)
d_weights3 = np.dot(self.layer2.T, output_error)
previous_error = output_error
error_new = np.dot(previous_error, self.weights3.T)*sigmoid_derivative(self.layer2)
d_weights2 = np.dot(self.layer1.T, error_new)
previous_error = error_new
d_weights1 = np.dot(self.input.T, (np.dot(previous_error, self.weights2.T) * sigmoid_derivative(self.layer1)))
# update the weights with the derivative (slope) of the loss function
self.weights1 += d_weights1
self.weights2 += d_weights2
self.weights3 += d_weights3