Библиотека Synaptic предоставляет удобные инструменты для построения и обучения нейронных сетей в JavaScript. Одним из ключевых аспектов работы с нейросетями является сохранение и восстановление состояния сети или отдельных её слоёв, что позволяет переносить модели между сеансами, хранить их на сервере или локально, а также интегрировать в различные приложения.
Сериализация — процесс преобразования структуры
нейронной сети или её компонентов в формат, который может быть сохранён
(обычно JSON) и восстановлен позднее. В Synaptic это реализуется через
методы toJSON() и fromJSON().
Каждый слой содержит набор параметров, необходимых для восстановления:
neurons) — массив объектов,
содержащих состояние каждого нейрона, включая веса входов
(connections), смещения (bias) и текущие
значения активации (activation).connections) — описывают
связи между нейронами, включая веса и идентификаторы нейронов.Layer),
количество нейронов, функции активации и дополнительные параметры,
специфичные для слоя.Пример сериализации слоя:
const { Layer } = require('synaptic');
let inputLayer = new Layer(3);
let jsonLayer = inputLayer.toJSON();
console.log(JSON.stringify(jsonLayer, null, 2));
В результате формируется объект с полной структурой слоя, включая все соединения и параметры.
Восстановление слоя из сериализованного объекта осуществляется
методом fromJSON(). Этот метод создаёт новый объект слоя и
заполняет его состоянием, сохранённым ранее:
let restoredLayer = Layer.fromJSON(jsonLayer);
После восстановления:
Важно учитывать, что восстановление слоя не подключает его автоматически к другим слоям сети. Для полной сети необходимо сериализовать и восстанавливать каждый слой и затем вручную соединять их.
Иногда требуется сохранить только определённые параметры слоя, например, веса или смещения, без сериализации всей структуры. В этом случае используется доступ к свойствам нейронов:
let weights = inputLayer.neurons().map(neuron => neuron.connections.inputs.map(conn => conn.weight));
let biases = inputLayer.neurons().map(neuron => neuron.bias);
Такая выборочная сериализация позволяет:
Для восстановления этих параметров необходимо вручную назначить веса и смещения нейронам:
inputLayer.neurons().forEach((neuron, i) => {
neuron.bias = biases[i];
neuron.connections.inputs.forEach((conn, j) => {
conn.weight = weights[i][j];
});
});
JSON является естественным форматом для обмена и хранения слоёв. Его преимущества:
При сохранении слоя или сети в файл можно использовать стандартные методы Node.js:
const fs = require('fs');
fs.writeFileSync('layer.json', JSON.stringify(jsonLayer));
Для восстановления:
const savedLayer = JSON.parse(fs.readFileSync('layer.json'));
let restoredLayer = Layer.fromJSON(savedLayer);
Сериализация и восстановление слоёв в Synaptic обеспечивает гибкость и контроль над состоянием нейронной сети, позволяя хранить, переносить и повторно использовать обученные компоненты с полной сохранностью их параметров.