Простая нейронная сеть дает неправильный вывод после тренировки - PullRequest
0 голосов
/ 16 апреля 2020

Я работал над простой нейронной сетью.

Он принимает набор данных с 3 столбцами, если значение первого столбца равно 1, то результат должен быть 1. У меня есть предоставленные комментарии, чтобы легче было следовать.

Код выглядит следующим образом:

import numpy as np
import random

def sigmoid_derivative(x):
    return x * (1 - x)

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def think(weights, inputs):
    sum = (weights[0] * inputs[0]) + (weights[1] * inputs[1]) + (weights[2] * inputs[2])
    return sigmoid(sum)

if __name__ == "__main__":

    # Assign random weights
    weights = [-0.165, 0.440, -0.867]

    # Training data for the network.
    training_data = [
        [0, 0, 1],
        [1, 1, 1],
        [1, 0, 1],
        [0, 1, 1]
    ]

    # The answers correspond to the training_data by place,
    # so first element of training_answers is the answer to the first element of training_data
    # NOTE: The pattern is if there's a 1 in the first place, the result should be a one
    training_answers = [0, 1, 1, 0]

    # Train the neural network
    for iteration in range(50000):
        # Pick a random piece of training_data
        selected = random.randint(0, 3)

        training_output = think(weights, training_data[selected])

        # Calculate the error
        error = training_output - training_answers[selected]

        # Calculate the adjustments that need to be applied to the weights
        adjustments = np.dot(training_data[selected], error * sigmoid_derivative(training_output))

        # Apply adjustments, maybe something wrong is going here?
        weights += adjustments

    print("The Neural Network has been trained!")

    # Result of print below should be close to 1
    print(think(weights, [1, 0, 0]))

Результат последней печати должен быть близок к 1, но это не так?

У меня такое ощущение, что я не корректирую вес правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...