Загрузка предобученных моделей

ConvNetJS — это чисто JavaScript-библиотека для построения, обучения и применения сверточных нейронных сетей. Одной из ключевых возможностей является использование предобученных моделей, что позволяет быстро запускать задачи распознавания без необходимости обучения с нуля.

Формат сохранения и загрузки моделей

Модель в ConvNetJS представляется объектом Net, который включает три основных компонента:

  1. Структура сети (layers) — описание архитектуры, включающее типы слоев, количество нейронов, фильтры свертки, функции активации и параметры нормализации.
  2. Параметры сети (params) — веса и смещения всех слоев.
  3. Опции тренировки (trainer) — настройки оптимизатора, скорость обучения, методы регуляризации.

Сохранение модели выполняется методом toJSON(), который возвращает сериализованный объект, пригодный для передачи по сети или сохранения в файл:

var json = net.toJSON();

Загрузка модели производится с помощью конструктора Net() и метода fromJSON():

var net2 = new convnetjs.Net();
net2.fromJSON(json);

Важно, что fromJSON() полностью восстанавливает как архитектуру сети, так и текущие значения весов.

Загрузка моделей из внешних источников

Предобученные модели обычно хранятся в формате JSON и могут быть загружены из локальных файлов или через HTTP-запросы. Для загрузки по URL удобно использовать fetch:

fetch('model.json')
  .then(response => response.json())
  .then(data => {
      var net = new convnetjs.Net();
      net.fromJSON(data);
      console.log("Модель загружена и готова к работе");
  });

При работе с большим числом параметров стоит учитывать размер JSON — некоторые модели могут достигать десятков мегабайт. В таких случаях оптимизация передачи через сжатие (gzip) значительно ускоряет загрузку.

Применение загруженной модели

После загрузки модели она готова к предсказаниям. Для этого создается Vol, представляющий входные данные:

var x = new convnetjs.Vol([28,28,1]); // пример для изображения 28x28x1
// заполнение Vol значениями пикселей
var output = net.forward(x);

Метод forward() возвращает объект Vol, содержащий значения выхода каждого нейрона последнего слоя. Для классификации с использованием softmax обычно извлекается индекс максимального значения:

var predictedClass = output.w.indexOf(Math.max(...output.w));

Совместимость версий

ConvNetJS не имеет встроенной системы версионирования моделей, поэтому необходимо следить, чтобы модель и библиотека были совместимы по версии. Любое изменение структуры слоев или API может сделать старую модель несовместимой.

Работа с несколькими предобученными моделями

Можно загружать и использовать несколько моделей одновременно. Каждая модель хранится в отдельном экземпляре Net. Это удобно для ансамблей или сравнительного анализа:

var netA = new convnetjs.Net();
netA.fromJSON(modelA);

var netB = new convnetjs.Net();
netB.fromJSON(modelB);

var resultA = netA.forward(input);
var resultB = netB.forward(input);

Практические рекомендации

  • Хранение на клиенте: JSON-модель можно кэшировать в localStorage для ускорения повторной загрузки.
  • Lazy loading: Для больших моделей загрузку можно выполнять асинхронно, показывая индикатор прогресса.
  • Проверка целостности: Перед использованием рекомендуется проверять корректность структуры и параметров сети.

Загрузка предобученных моделей в ConvNetJS позволяет ускорить интеграцию нейронных сетей в веб-приложения, минимизируя время на обучение и обеспечивая воспроизводимость экспериментов.