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.