Я пытаюсь сделать классификатор персептрона для нечетных и четных чисел. Я реализую это с нуля. Я создал функцию с именем nn, которая принимает целое число в качестве входных данных и затем выводит ответ, либо 1, либо -1, соответственно, для да и нет.
До определения функции я определил переменные веса и смещения, значение из которых выбираются случайным образом и являются глобальными (теперь я знаю, что глобальных переменных следует избегать, но поскольку это тест, меня это пока не волнует).
Затем существует функция поезда , который принимает ввод и желаемый вывод. Поскольку переменные веса и смещения являются глобальными, они могут легко получить к ним доступ. Функция обучения вызывает функцию nn, чтобы увидеть результат. Если выходные данные и требуемые выходные данные не совпадают, обновляются переменные веса и смещения. Для этого я использую дельта-правило. Формула выглядит следующим образом:
updated_weight=current_weight+learning_rate * (desired_output - current_output)*provided_input.
Это делается до тех пор, пока вывод не будет правильным.
Сама функция nn содержит это:
z=weight*x+bias
return 1/(1+math.exp(-z))
Здесь, x
является вводом для nn.
Функция смещения обновляется так же, как и веса. Дело в том, что входные числа увеличиваются (что, конечно, ожидается), а весовые коэффициенты смещаются в отрицательные числа. После тренировки в течение некоторого времени некоторые цифры корректируются, как и ожидалось, но другие перепутались. Это нормально, и я должен продолжать тренировки? Это решит эти проблемы в конечном счете? Честно говоря, я pesimisti c об этом.