Sequential API — стек слоёв

Урок учит собирать модель через Sequential — самый простой способ описать нейросеть в Keras.

Sequential API — это способ задать модель как линейный стек слоёв, где выход каждого слоя становится входом следующего.

Большинство учебных и многих рабочих сетей — это просто цепочка: вход → слой → слой → выход, без ветвлений. Для них Keras даёт Sequential — вы перечисляете слои списком, и модель готова.

Два способа собрать стек

Можно передать список слоёв сразу или добавлять по одному через add. Оба варианта требуют TF (в браузере не идут):

import tensorflow as tf
from tensorflow.keras import layers

# вариант 1: список
model = tf.keras.Sequential([
    layers.Dense(64, activation="relu", input_shape=(784,)),
    layers.Dense(32, activation="relu"),
    layers.Dense(10, activation="softmax"),
])

# вариант 2: пошагово
model = tf.keras.Sequential()
model.add(layers.Dense(64, activation="relu", input_shape=(784,)))
model.add(layers.Dense(10, activation="softmax"))

Структура сети наглядно

вход (784) ──> Dense(64, relu) ──> Dense(32, relu) ──> Dense(10, softmax) ──> выход
              скрытый слой        скрытый слой         выходной слой
                                                       (10 классов)

summary и подсчёт параметров

Метод model.summary() печатает таблицу слоёв и число обучаемых параметров. Для слоя Dense это (вход × нейроны) + нейроны (последнее — смещения). Посчитаем для первого слоя сами — этот код запускается:

input_features = 784
neurons = 64

weights = input_features * neurons
biases = neurons
total = weights + biases

print("весов:", weights)
print("смещений:", biases)
print("параметров в слое:", total)

Вывод:

весов: 50176
смещений: 64
параметров в слое: 50240

Как работает под капотом

Sequential при fit прогоняет данные строго по порядку: forward pass идёт слой за слоем сверху вниз, а backward pass (градиенты) — снизу вверх. Слой узнаёт форму входа либо из input_shape первого слоя, либо «лениво» при первом проходе данных — поэтому до первого вызова summary() может ругаться, что модель ещё не построена.

Частые ошибки

  • Забыть input_shape у первого слоя. Тогда модель не построена и summary() падает — либо укажите форму, либо «прогоните» данные.
  • Использовать Sequential для ветвлений. Если в сети несколько входов/выходов или skip-связи, нужен Functional API (о нём отдельный урок).
  • Неверный размер выходного слоя. Число нейронов выхода должно равняться числу классов (или 1 для регрессии).

Итог

  • Sequential описывает сеть как линейный стек слоёв, без ветвлений.
  • Слои добавляют списком или через add().
  • Параметры слоя Dense = вход×нейроны + нейроны (смещения).
  • Для сложных топологий (ветвления, несколько входов) Sequential не подходит — нужен Functional API.
Проверьте себя
1. Для каких сетей подходит Sequential API?
AТолько для свёрточных
BДля линейного стека слоёв без ветвлений
CДля сетей с несколькими входами
DДля любых, включая графовые
2. Сколько параметров у слоя Dense с 784 входами и 64 нейронами?
A784
B50176
C50240
D64
3. Что задаёт input_shape у первого слоя?
AЧисло классов
BФорму входных данных, чтобы модель построилась
CСкорость обучения
DФункцию активации