Обратное распространение не распространяется на несколько слоев - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть простая нейронная сеть, которая принимает 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
...