Библиотека Synaptic предоставляет удобный интерфейс для создания и обучения нейронных сетей на JavaScript. Одним из важных аспектов работы с нейронными сетями является сохранение обученной модели для последующего использования. В веб-приложениях это можно реализовать с помощью localStorage, который обеспечивает хранение данных в браузере пользователя между сессиями.
Для сохранения нейронной сети необходимо преобразовать её в формат,
который может быть безопасно сохранён в localStorage. В Synaptic
предусмотрен метод toJSON(), возвращающий
объект с полным описанием архитектуры сети и её весов:
const synaptic = require('synaptic');
const { Layer, Network } = synaptic;
// Создание простой сети
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
// Преобразование сети в JSON
const networkJSON = myNetwork.toJSON();
После получения JSON-объекта его можно конвертировать в строку для сохранения в localStorage:
const jsonString = JSON.stringify(networkJSON);
localStorage.setItem('myNetwork', jsonString);
Для восстановления сети используется метод
Network.fromJSON(), который принимает
объект с конфигурацией сети. Сначала необходимо извлечь строку из
localStorage и преобразовать её обратно в объект:
const savedNetworkString = localStorage.getItem('myNetwork');
if (savedNetworkString) {
const savedNetworkJSON = JSON.parse(savedNetworkString);
const restoredNetwork = Network.fromJSON(savedNetworkJSON);
}
Таким образом, обученная сеть может быть восстановлена в любой момент без повторного обучения.
При обновлении архитектуры сети или изменений в коде важно контролировать совместимость сохранённых моделей. Для этого можно добавлять метаинформацию:
const networkData = {
version: '1.0',
timestamp: Date.now(),
network: myNetwork.toJSON()
};
localStorage.setItem('myNetwork', JSON.stringify(networkData));
При загрузке проверка версии позволяет корректно обрабатывать несовместимые модели:
const savedDataString = localStorage.getItem('myNetwork');
if (savedDataString) {
const savedData = JSON.parse(savedDataString);
if (savedData.version === '1.0') {
const restoredNetwork = Network.fromJSON(savedData.network);
} else {
console.warn('Версия модели не совпадает. Возможно, требуется миграция.');
}
}
LocalStorage ограничен по объёму (обычно около 5–10 МБ). Для уменьшения размера сохраняемой модели можно использовать:
lz-string:const compressed = LZString.compress(JSON.stringify(myNetwork.toJSON()));
localStorage.setItem('myNetworkCompressed', compressed);
Для веб-приложений, которые адаптируются под пользовательские данные, можно реализовать автоматическое обновление модели при завершении обучения:
function saveNetwork(network) {
const data = JSON.stringify(network.toJSON());
localStorage.setItem('myNetwork', data);
}
function trainAndSave(network, trainingSet) {
trainingSet.forEach(sample => {
network.activate(sample.input);
network.propagate(0.3, sample.output);
});
saveNetwork(network);
}
setTimeout или
использование Web Workers для предотвращения блокировки
интерфейса.Хранение модели в localStorage позволяет создавать интерактивные веб-приложения с устойчивым обучением нейронных сетей без необходимости обращения к серверу, сохраняя пользовательские данные локально и обеспечивая быстрый доступ к обученной модели.