ConvNetJS предоставляет возможность сохранять и загружать нейронные
сети в виде JSON-объектов. Этот подход позволяет сохранять архитектуру
сети, параметры слоев, веса и смещения, обеспечивая полную
восстановимость модели для дальнейшего использования или продолжения
обучения. Десериализация является процессом преобразования
JSON-представления модели обратно в рабочий объект нейронной сети
(Net).
Сериализованная модель в ConvNetJS содержит следующие ключевые элементы:
layers — массив объектов, каждый из
которых описывает слой сети, его тип, параметры и состояние.biases — массив смещений для нейронов
каждого слоя.filters — массив весов фильтров для
сверточных слоев.activation — значения активации
нейронов, которые могут быть сохранены при необходимости.params — дополнительные параметры
слоев, такие как размер фильтров, количество фильтров, шаг свертки, тип
функции активации.Пример JSON-представления небольшого сверточного слоя:
{
"layers":[
{"type":"input","out_sx":32,"out_sy":32,"out_depth":3},
{"type":"conv","sx":5,"filters":[
{"w":[...],"bias":0.1},
{"w":[...],"bias":0.2}
],"stride":1,"pad":2,"activation":"relu"}
],
"train_opts":{"learning_rate":0.01,"momentum":0.9,"batch_size":10}
}
1. Создание пустой сети и загрузка параметров
Объект convnetjs.Net предоставляет метод
fromJSON(json), который принимает сериализованное состояние
сети и восстанавливает её структуру вместе с параметрами.
let net = new convnetjs.Net();
net.fromJSON(jsonData);
После вызова fromJSON объект net полностью
готов к использованию: можно производить прямое распространение сигнала
через forward(), рассчитывать ошибки и продолжать обучение
через trainer.train().
2. Особенности работы с весами и фильтрами
При десериализации важно учитывать:
filters должен
совпадать по размерности с количеством фильтров в слое. ConvNetJS
автоматически инициализирует фильтры согласно сохранённым
значениям.weights и
biases должен строго соответствовать размерности слоя.relu, sigmoid, tanh), и
fromJSON корректно их восстанавливает.Любое несовпадение структуры при загрузке приведёт к ошибкам в дальнейшем вычислении.
После загрузки модели рекомендуется выполнить несколько шагов проверки:
Проверка структуры слоев
console.log(net.layers.length);
console.log(net.layers.map(l => l.layer_type));
Это позволяет убедиться, что все слои восстановлены в правильном порядке.
Проверка весов и смещений
console.log(net.layers[1].filters[0].w.length);
console.log(net.layers[1].filters[0].bias);
Сверка размеров массивов гарантирует, что веса корректно загружены.
Тестовое прямое распространение Перед использованием модели для обучения или предсказаний имеет смысл выполнить один проход:
let x = new convnetjs.Vol(32, 32, 3);
let output = net.forward(x);
console.log(output.w);trainer или использовать их стандартные
настройки.Частичное восстановление сети: можно загружать веса только для определённых слоев. Это полезно при переносном обучении:
let pretrained = new convnetjs.Net();
pretrained.fromJSON(jsonData);
net.layers[1].filters = pretrained.layers[1].filters;Динамическая модификация архитектуры: после загрузки модели можно добавлять новые слои и повторно инициализировать тренинг для адаптации к новым задачам.
Сравнение моделей: десериализованные сети можно сравнивать по весам и смещениям для анализа изменений после обучения.
Десериализация в ConvNetJS обеспечивает полное восстановление структуры и параметров нейронной сети из JSON. Этот процесс является ключевым для повторного использования моделей, обмена между системами и продолжения обучения без потери ранее полученных знаний.