Объясните пожалуйста, что не так с мои кодом маленькой нейросети?

Я решил написать код, чтобы разобраться как работают нейросети. В итоге я не получаю ожидаемого ответ. Нейросеть должна научиться определять чётное или нечётное число, которое я ему ввожу с клавиатуры. Нужны ли тут скрытые слои для такой нетрудной задачи и что мне стоит изменить в коде?

import numpy as np
from random import randint, random

# Генерация данных
x = [randint(1, 1000) for _ in range(100)]
y = [1 if xi % 2 == 0 else 0 for xi in x]  # Четные = 1, Нечетные = 0

# Инициализация весов и смещения
b = random() * 0.01
weight = random() * 0.01
epochs = 2000
sp = 0.1  # Скорость обучения

# Функция активации
def sigma(x):
    return 1 / (1 + np.exp(-x))

# Производная функции активации
def gradient(res):
    return res * (1 - res)

# Нормализация данных
def normals(x):
    mx = max(x)
    mn = min(x)
    return [(i - mn) / (mx - mn) for i in x]

# Нормализуем данные
x = normals(x)

# Обучение модели
for epoch in range(epochs):
    for i in range(100):
        total_input = weight * x[i] + b
        res = sigma(total_input)
        
        # Ошибка
        error = y[i] - res
        delta = error * gradient(res)
        
        # Обновление весов и смещения
        weight += delta * x[i] * sp
        b += delta * sp
        

# Проверка на новых данных
for _ in range(10):
    data = float(input("Введите число: "))
    normalized_data = (data - min(x)) / (max(x) - min(x))  # Нормализуем новое значение
    total_input = weight * normalized_data + b
    res = sigma(total_input)
    print(res)
    print("no" if res < 0.5 else "yes")

Ответы (0 шт):