Объясните пожалуйста, что не так с мои кодом маленькой нейросети?
Я решил написать код, чтобы разобраться как работают нейросети. В итоге я не получаю ожидаемого ответ. Нейросеть должна научиться определять чётное или нечётное число, которое я ему ввожу с клавиатуры. Нужны ли тут скрытые слои для такой нетрудной задачи и что мне стоит изменить в коде?
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")