Обратное распространение делает вывод в среднем до 0,5 - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть модель нейронной сети, над которой я работаю в 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], я пытаюсь создать ее так, чтобы форма была расширяемой, чтобы я мог использовать ее для других проектов.Просто нужна обратная часть.Благодаря.

...