Библиотека Brain.js предоставляет инструменты для создания, обучения и использования нейронных сетей на JavaScript. Одним из ключевых аспектов работы с нейронными сетями является возможность сохранять обученные модели для последующего использования, что позволяет избежать повторного обучения и ускоряет внедрение сети в приложения.
После завершения обучения нейронной сети можно сохранить её состояние
в виде объекта. Для этого используется метод toJSON(),
который сериализует все веса, структуры и настройки сети в стандартный
JSON-формат:
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 = net.toJSON();
Ключевые моменты:
toJSON() включает в себя все внутренние
параметры сети: веса, смещения и настройки обучения.Для записи модели на диск используется стандартный модуль Node.js
fs:
const fs = require('fs');
fs.writeFileSync('model.json', JSON.stringify(jsonModel, null, 2));
Особенности:
JSON.stringify с параметром
null, 2 позволяет сохранять JSON в удобочитаемом
формате.model.json содержит полное состояние сети, что
позволяет восстановить модель позже без повторного обучения.Для загрузки ранее сохранённой модели необходимо прочитать JSON-файл
и передать его в метод fromJSON():
const savedModel = JSON.parse(fs.readFileSync('model.json', 'utf-8'));
const newNet = new brain.NeuralNetwork();
newNet.fromJSON(savedModel);
// Применение восстановленной сети
console.log(newNet.run([1, 0])); // [0.987] – пример выхода
Важно:
fromJSON() можно применять к новой или
существующей сети, перезаписывая её текущее состояние.NeuralNetworkGPU и LSTMДля сетей с ускорением на GPU или рекуррентных сетей (например,
LSTM) процесс сохранения и восстановления идентичен:
const net = new brain.recurrent.LSTM();
net.train([
{ input: "Привет", output: "Здравствуйте" },
{ input: "Пока", output: "До свидания" }
]);
const jsonModel = net.toJSON();
fs.writeFileSync('lstm_model.json', JSON.stringify(jsonModel, null, 2));
const lstmNet = new brain.recurrent.LSTM();
lstmNet.fromJSON(JSON.parse(fs.readFileSync('lstm_model.json', 'utf-8')));
console.log(lstmNet.run("Привет")); // "Здравствуйте"
Особенности сохранения:
Для проектов с частыми изменениями модели удобно реализовать автоматическое сохранение после обучения:
function saveNetwork(network, filename) {
const json = network.toJSON();
fs.writeFileSync(filename, JSON.stringify(json, null, 2));
}
// Использование
saveNetwork(net, 'xor_model.json');
Преимущества такого подхода:
Хотя Brain.js работает с JSON, для проектов с большим объёмом данных можно использовать бинарное хранение через Buffer:
const buffer = Buffer.from(JSON.stringify(net.toJSON()));
fs.writeFileSync('model.bin', buffer);
// Чтение
const loadedBuffer = fs.readFileSync('model.bin');
const loadedModel = JSON.parse(loadedBuffer.toString());
newNet.fromJSON(loadedModel);
Преимущества:
С помощью этих методов можно эффективно сохранять, загружать и управлять нейронными сетями в Brain.js, что обеспечивает надёжную интеграцию моделей в проекты без необходимости повторного обучения.