Brain.js — это мощная библиотека для работы с нейронными сетями на JavaScript, позволяющая создавать, обучать и использовать модели для различных задач, включая классификацию, регрессию и предсказание последовательностей. Одной из ключевых возможностей является сохранение и загрузка обученных моделей, что позволяет повторно использовать их без необходимости повторного обучения.
Модель в Brain.js может быть сохранена в виде объекта JavaScript с полями, содержащими структуру сети и веса нейронов. Существует два основных подхода:
JSON-объект — стандартный способ сохранения модели в Brain.js. Позволяет сериализовать сеть и хранить её в любом месте: на диске, в базе данных или передавать по сети. Пример структуры JSON:
{
"sizes": [3, 4, 1],
"layers": [
{"input": [0.5, 0.1, 0.7]},
{"hidden": [0.2, 0.8, 0.4, 0.9]},
{"output": [0.3]}
],
"outputLookup": true,
"inputLookup": true
}Файловая сериализация — запись JSON в файл с
последующей загрузкой. Используется стандартный модуль fs
для работы с файловой системой Node.js.
После обучения сети модель можно сохранить следующим образом:
const brain = require('brain.js');
const fs = require('fs');
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 modelJSON = net.toJSON();
// Запись в файл
fs.writeFileSync('model.json', JSON.stringify(modelJSON), 'utf8');
Ключевой момент: net.toJSON() возвращает объект модели,
который содержит все веса и конфигурацию сети, включая
количество слоев, функции активации и структуры входов/выходов.
Загрузка модели — обратный процесс. Необходимо считать JSON с диска,
затем передать его в метод fromJSON для восстановления
сети.
const fs = require('fs');
const brain = require('brain.js');
// Создание новой сети
const net = new brain.NeuralNetwork();
// Чтение файла с моделью
const modelData = fs.readFileSync('model.json', 'utf8');
// Восстановление сети из JSON
net.fromJSON(JSON.parse(modelData));
// Использование сети для предсказаний
const output = net.run([1, 0]);
console.log(output);
Особенности загрузки:
fromJSON полностью восстанавливает состояние
сети, включая веса и конфигурацию слоев.inputLookup и
outputLookup, эти параметры также сохраняются и
восстанавливаются автоматически.Brain.js поддерживает несколько видов сетей:
NeuralNetwork, NeuralNetworkGPU,
LSTM, LSTMTimeStep. Процесс сохранения и
загрузки схож для всех типов:
const lstm = new brain.recurrent.LSTM();
// Обучение LSTM
lstm.train([{ input: 'hello', output: 'hi' }, { input: 'how are you', output: 'fine' }]);
// Сохранение
fs.writeFileSync('lstm-model.json', JSON.stringify(lstm.toJSON()), 'utf8');
// Загрузка
const lstmLoaded = new brain.recurrent.LSTM();
lstmLoaded.fromJSON(JSON.parse(fs.readFileSync('lstm-model.json', 'utf8')));
console.log(lstmLoaded.run('hello')); // выводит 'hi'
Важно учитывать, что для LSTM и временных сетей последовательность данных и предварительная обработка должны быть согласованы с обучением, иначе результаты предсказаний могут быть некорректны.
JSON.stringify(modelJSON, null, 2) при записи для удобства
чтения или JSON.stringify(modelJSON) для минимального
размера файла.Brain.js позволяет загружать модели и в браузере через стандартный
fetch:
fetch('model.json')
.then(response => response.json())
.then(modelJSON => {
const net = new brain.NeuralNetwork();
net.fromJSON(modelJSON);
const output = net.run([1, 0]);
console.log(output);
});
Это позволяет разворачивать обученные модели на стороне клиента, исключая необходимость повторного обучения на каждой загрузке страницы.
Механизм сохранения и загрузки моделей в Brain.js обеспечивает
гибкость и экономию ресурсов. Ключевые элементы — корректная
сериализация через toJSON и восстановление состояния через
fromJSON. Правильная организация файлов и согласование
параметров сети при загрузке гарантирует воспроизводимость результатов и
стабильную работу нейронной сети.