Вывод структуры модели: model.summary()

Keras.js представляет собой JavaScript-реализацию высокоуровневого API Keras, позволяя загружать и запускать модели, обученные в Python Keras, непосредственно в браузере или Node.js. Одним из ключевых аспектов работы с нейронными сетями является понимание их структуры и параметров. Метод model.summary() служит именно для этой цели: он выводит подробное описание архитектуры модели, включая слои, форму входов и выходов, количество параметров и тип соединений.

Основы метода model.summary()

Метод summary() принадлежит объекту модели (Sequential или Model) и выполняет следующие функции:

  • Вывод послойной структуры модели.
  • Отображение формы входных и выходных тензоров для каждого слоя.
  • Подсчет количества обучаемых и необучаемых параметров.
  • Упрощение анализа архитектуры перед обучением или использованием модели для предсказаний.

Синтаксис в Keras.js практически идентичен Python Keras:

const model = new KerasJS.Model({ filepath: 'model.json' });
await model.ready();
model.summary();

Структура вывода

Вывод summary() можно разделить на несколько ключевых частей:

  1. Идентификатор слоя и его тип

    • Каждому слою присваивается уникальное имя, например dense_1, conv2d_1.
    • Тип слоя указывает на его функциональное назначение: Dense, Conv2D, Dropout, Activation и др.
  2. Форма входных и выходных данных

    • Параметр Output Shape показывает размерность тензора после обработки данным слоем.
    • Пример: (null, 128) означает, что на вход слоя поступают батчи переменной длины (null обозначает размер батча), а выход имеет 128 признаков.
  3. Количество параметров

    • Param # отражает количество обучаемых и необучаемых весов.
    • В Dense-слое вычисление производится как input_units * output_units + output_units (включая смещения).
    • В Conv2D учитывается размер ядра фильтра и количество каналов.
  4. Итого

    • Внизу выводится суммарное количество параметров модели, разделенное на обучаемые и необучаемые.
    • Это важная метрика для оценки сложности сети и необходимости регуляризации.

Пример для последовательной модели

const model = new KerasJS.Model({
  filepath: 'model.json'
});

await model.ready();
model.summary();

Ожидаемый вывод может быть примерно таким:

Layer (type)               Output Shape         Param #
========================================================
dense_1 (Dense)            (null, 64)          640
activation_1 (Activation)  (null, 64)          0
dense_2 (Dense)            (null, 10)          650
========================================================
Total params: 1,290
Trainable params: 1,290
Non-trainable params: 0

В этом примере видна последовательность слоев: два полносвязных слоя с активациями, а также количество параметров для каждого.

Особенности для функциональной модели

Функциональная API в Keras.js позволяет создавать сложные архитектуры с ветвлениями, объединениями и несколькими входами/выходами. Метод summary() в таких случаях:

  • Выводит каждый слой с указанием всех входов и выходов.
  • Позволяет увидеть, как слои соединяются через графовую структуру.
  • Отображает все параллельные потоки данных.

Пример с ветвлением:

Layer (type)               Output Shape         Param #
========================================================
input_1 (InputLayer)       (null, 32)          0
dense_1 (Dense)            (null, 64)          2112
dense_2 (Dense)            (null, 64)          4160
concatenate_1 (Concatenate)(null, 128)         0
dense_3 (Dense)            (null, 10)          1290
========================================================
Total params: 7,562
Trainable params: 7,562
Non-trainable params: 0

Здесь видно, как объединяются параллельные слои с помощью Concatenate.

Практическое значение

Вывод summary() важен для:

  • Проверки архитектуры модели после импорта из Python Keras.
  • Отладки ошибок формы входных данных — несоответствие размерностей часто выявляется на этапе summary().
  • Оценки числа параметров для планирования памяти в браузере или Node.js.
  • Документирования архитектуры перед публикацией или совместной работой с другими разработчиками.

Дополнительные параметры

В Keras.js summary() может принимать небольшие конфигурации вывода, например:

  • lineLength — ширина строки для вывода таблицы.
  • positions — массив позиций для выравнивания столбцов.

Пример:

model.summary({ lineLength: 100, positions: [0.3, 0.6, 1.0] });

Это полезно для улучшения читаемости в интерфейсах с ограниченной шириной.

Советы по использованию

  • Всегда вызывать model.ready() перед summary(), чтобы убедиться, что модель загружена и готова к использованию.
  • Для больших моделей рекомендуется выводить только ключевые слои, чтобы избежать перегруженности консоли.
  • Можно сочетать с логированием через console.table() для более наглядного представления параметров.

Метод model.summary() является основным инструментом для анализа структуры моделей в Keras.js и обеспечивает полный контроль над архитектурой и параметрами сети, что особенно важно при работе с веб-приложениями, где ресурсы ограничены.