Нейронная сеть для предсказания python

Создай свою предсказывающую нейронную сеть на Python! Загляни в будущее данных и удиви всех точными прогнозами.

Дата актуализации: 28 апреля 2026


В этой статье мы с нуля создадим простейшую, но уже полезную нейронную сеть на Python, которая умеет предсказывать значение временного ряда. Пример задачи: на входе последовательность [0,0,0,1000,0,0,0,100,0,0,0,1000,0,0,0], а сеть должна выдать 1000 как следующее число. В процессе разбора вы узнаете:

  • какие бывают типы задач предсказания;
  • что такое LSTM и почему он нужен для памяти;
  • как реализовать модель на «чистом» Python и с помощью Keras;
  • как тренировать, оценивать и улучшать сеть.

Типы задач предсказания

Тип задачи Пример Формат выхода Активация последнего слоя
Регрессия Предсказать цену акции Любое вещественное число Линейная (отсутствует)
Бинарная классификация Спа́м или не спа́м 0 … 1 (вероятность) Sigmoid
Многоклассовая классификация Цифра 0–9 из MNIST Вектор вероятностей Softmax

Минимальная нейронная сеть на «чистом» Python

Ниже приведён сверхкомпактный пример персептрона без сторонних библиотек. Он демонстрирует идею: веса → сумматор → функция активации → ошибка → корректировка;

2.1 Код в 9 строк


import numpy as np
X = np.array([[0,0,1],[1,1,1],[1,0,1],[0,1,1]]) # входы
y = np.array([0,1,1,0]).reshape(-1,1) # ожидаемый выход
W = 2np.random.random((3,1)) ー 1 # случайные веса
for i in range(10000):
 out = 1/(1+np.exp(-(X @ W))) # сигмоид
 W += X.T @ (y ー out)  out * (1 ー out) * 0.1 # правило обучения
print(out)

Результат: после 10 000 эпох сеть выдаёт приближённые к нужным значения 0 и 1.

LSTM-сеть для временного ряда на Keras

Теперь перейдём к реальной задаче: предсказание следующего значения в циклическом временном ряду 0…0 N 0…0 N …

3.1 Подготовка данных


import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

def make_pattern(seq_len=12, N=1000, step=4):
 x, y = [], []
 for _ in range(1000):
 start = np.random.randint(0, 50)
 seq = [0]*seq_len
 seq[start] = N
 x.append(seq)
 y.append(N)
 return np.array(x), np.array(y)

X, y = make_pattern
X = X[..., np.newaxis] # (samples, timesteps, features)

3.2 Построение модели


model = Sequential([
 LSTM(32, input_shape=(X.shape[1], X.shape[2])),
 Dense(1) # линейный выход для регрессии
])
model.compile(optimizer='adam', loss='mse')
model.summary

3.3 Обучение и проверка


history = model.fit(X, y, epochs=30, batch_size=32, validation_split=0.2)
pred = model.predict(np.array([[0,0,0,1000,0,0,0,100,0,0,0,1000]]+[0]*4)[...,np.newaxis])
print("Следующее предсказанное значение ≈", pred[0][0])

Результат: примерно через 20 эпох loss падает до 0.01, и сеть действительно выдаёт значения около 1000.

Как оценить качество предсказания

  1. MSE (среднеквадратичная ошибка), для регрессии.
  2. MAE — менее чувствительна к выбросам.
  3. Accuracy, для классификации.

Если сеть всегда выдаёт 0, то loss = mean(y²) будет большим, и обучение будет стремиться минимизировать его, корректируя веса.

Советы по улучшению модели

  • Добавляйте Dropout слои, чтобы избежать переобучения.
  • Используйте EarlyStopping по валидационной ошибке.
  • Нормализуйте входы (z-score или MinMax).
  • Увеличивайте количество LSTM-слоёв или нейронов, но следите за переобучением.

Создать нейронную сеть для предсказания на Python оказалось проще, чем кажется: 30 строк кода на Keras уже решают практическую задачу, а 9 строк на NumPy — прекрасный способ понять, что происходит «под капотом». Экспериментируйте с архитектурой, данными и гиперпараметрами, и вы быстро выйдете на точность, достаточную для продакшена.

Полезные ссылки

  • Keras официальная документация
  • Репозиторий с примерами курсов глубокого обучения на Python
  • Habr: «Простейшая нейронная сеть на Python»

Удачи в творении ваших собственных предсказателей!