Brain.js предоставляет возможность не только создавать и обучать нейронные сети, но и экспортировать их для дальнейшего использования без необходимости повторного обучения. Это особенно полезно при интеграции сети в веб-приложения, серверные скрипты или любые среды, где повторное обучение нежелательно или невозможно. Экспорт позволяет превратить сеть в автономную функцию, которая принимает входные данные и возвращает предсказания.
Прежде чем экспортировать нейронную сеть, необходимо убедиться, что она полностью обучена. Например, для простой feedforward сети:
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] }
]);
После завершения обучения сеть готова к сериализации и последующему экспорту.
Brain.js предоставляет несколько способов экспорта сети:
toJSON() можно получить объект, полностью описывающий
структуру сети и веса всех нейронов:const json = net.toJSON();
console.log(json);
Этот JSON можно сохранить в файл и позже загрузить в другую среду:
const fs = require('fs');
fs.writeFileSync('network.json', JSON.stringify(json));
const exported = net.toFunction();
Метод toFunction() возвращает функцию JavaScript,
способную принимать массив входных данных и возвращать результат работы
сети. Она полностью автономна: все веса и вычисления закодированы внутри
функции.
Автономная функция позволяет выполнять предсказания без подключения к Brain.js. Пример:
const netFunction = net.toFunction();
console.log(netFunction([0, 1])); // Вернет значение близкое к 1
console.log(netFunction([1, 1])); // Вернет значение близкое к 0
Особенность этого подхода — высокая скорость работы. В отличие от полноценной сети Brain.js, функция не создает объекты для каждого слоя, не использует внутренние методы и напрямую вычисляет значения нейронов по формулам.
toFunction(). Любые изменения структуры или
повторное обучение потребуют новой генерации функции.Для recurrent сети (например,
recurrent.LSTM) процесс аналогичен:
const lstm = new brain.recurrent.LSTM();
lstm.train([
{ input: 'Привет', output: 'Здравствуй' },
{ input: 'Пока', output: 'До свидания' }
]);
const lstmFunction = lstm.toFunction();
console.log(lstmFunction('Привет')); // Вернет "Здравствуй"
Функция сохраняет внутренние состояния сети для каждого слоя и обеспечивает корректное предсказание на новых входных данных.
| Метод | Преимущества | Недостатки |
|---|---|---|
toJSON() |
Гибкость, возможность дообучения | Требуется Brain.js для использования |
toFunction() |
Высокая скорость, автономность | Статичная сеть, невозможно дообучение |
Экспорт сети в автономную функцию позволяет создавать легковесные и быстро работающие решения для приложений, где повторное обучение не требуется. Такой подход особенно эффективен для веб-сервисов, фронтенд-приложений и серверной обработки данных, где критична производительность и минимальные зависимости.