Загрузка модели с диска

Brain.js — это мощная библиотека для работы с нейронными сетями на JavaScript, позволяющая создавать, обучать и использовать модели для различных задач, включая классификацию, регрессию и предсказание последовательностей. Одной из ключевых возможностей является сохранение и загрузка обученных моделей, что позволяет повторно использовать их без необходимости повторного обучения.

Форматы сохранения модели

Модель в Brain.js может быть сохранена в виде объекта JavaScript с полями, содержащими структуру сети и веса нейронов. Существует два основных подхода:

  1. 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
    }
  2. Файловая сериализация — запись 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 и временных сетей последовательность данных и предварительная обработка должны быть согласованы с обучением, иначе результаты предсказаний могут быть некорректны.

Советы по работе с файлами моделей

  1. Сжатие JSON: для больших моделей можно использовать JSON.stringify(modelJSON, null, 2) при записи для удобства чтения или JSON.stringify(modelJSON) для минимального размера файла.
  2. Версионирование: при работе с разными версиями сети рекомендуется хранить версию модели внутри JSON для совместимости.
  3. Безопасность: при загрузке моделей из внешних источников проверять данные на корректность, чтобы избежать ошибок десериализации.

Прямое использование в браузере

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. Правильная организация файлов и согласование параметров сети при загрузке гарантирует воспроизводимость результатов и стабильную работу нейронной сети.