LocalStorage предоставляет возможность сохранять данные в браузере на стороне клиента в формате строк. Любые объекты JavaScript, включая модели нейронных сетей Brain.js, необходимо предварительно преобразовать в строку, прежде чем помещать их в localStorage. Этот процесс называется сериализацией. В обратном порядке, когда данные извлекаются из localStorage, выполняется десериализация — преобразование строки обратно в объект, пригодный для работы.
Модели Brain.js представляют собой объекты, содержащие внутренние
веса, настройки и состояние сети. Для их сохранения используется метод
toJSON():
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
// Обучение сети на примере
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] },
]);
// Сериализация в JSON
const jsonModel = JSON.stringify(net.toJSON());
localStorage.setItem('brainModel', jsonModel);
Ключевые моменты:
toJSON() возвращает объект с полным состоянием
нейронной сети, включая веса, количество скрытых слоев и функции
активации.JSON.stringify() преобразует объект в строку,
совместимую с localStorage.localStorage.setItem(key, value) сохраняет строку по
указанному ключу.Для восстановления сети из сохраненного состояния используется метод
fromJSON():
const savedModel = localStorage.getItem('brainModel');
if (savedModel) {
const netRestored = new brain.NeuralNetwork();
netRestored.fromJSON(JSON.parse(savedModel));
// Проверка работы восстановленной сети
const output = netRestored.run([1, 0]);
console.log(output);
}
Особенности:
localStorage.getItem(key) возвращает строку или
null, если ключ не найден.JSON.parse() преобразует строку обратно в объект.fromJSON() полностью восстанавливает внутреннее
состояние сети, включая обученные веса.LZString) перед сохранением.const modelData = {
version: 1,
model: net.toJSON(),
};
localStorage.setItem('brainModelV1', JSON.stringify(modelData));
// При восстановлении
const savedData = JSON.parse(localStorage.getItem('brainModelV1'));
if (savedData && savedData.version === 1) {
const netRestored = new brain.NeuralNetwork();
netRestored.fromJSON(savedData.model);
}
Это обеспечивает контроль совместимости и упрощает обновление сети без потери данных.
| Метод | Преимущества | Недостатки |
|---|---|---|
| localStorage | Простота, доступность в браузере | Ограничение по размеру (~5 МБ) |
| IndexedDB | Большие объёмы данных, транзакции | Сложнее API, требует асинхронного кода |
| Сжатие + localStorage | Позволяет сохранить большие сети | Дополнительная обработка, сложнее восстановление |
Использование localStorage для сериализации моделей Brain.js является
оптимальным решением для небольших сетей, быстрых прототипов и
сохранения состояния между сессиями. Десериализация через
fromJSON() обеспечивает полное восстановление модели без
повторного обучения.