Brain.js предоставляет гибкие возможности для работы с нейронными сетями в JavaScript, включая сохранение и восстановление состояния сети. Импорт весов из внешних источников позволяет перенести заранее обученную модель в новую среду, ускорить процесс обучения или использовать результаты сторонних экспериментов.
Нейронные сети Brain.js хранят свои параметры в виде объектов JavaScript. Основные компоненты весов:
weights — массив весов для каждой
связи между нейронами.biases — смещения каждого нейрона,
которые влияют на активацию сети.layers — структура сети: количество
нейронов на каждом уровне.outputLookup и
inputLookup — словари для кодирования
категориальных данных.activation — функция активации сети
(sigmoid, relu, leaky-relu,
tanh).Эти элементы вместе формируют «снимок» состояния сети, который может быть сериализован и сохранён, например, в JSON.
Для экспорта и последующего импорта модели используются методы
toJSON() и fromJSON():
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] }]);
// Сериализация весов
const savedWeights = net.toJSON();
// Импорт весов в новую сеть
const newNet = new brain.NeuralNetwork();
newNet.fromJSON(savedWeights);
После вызова fromJSON() новая сеть полностью
воспроизводит поведение исходной, включая настройки структуры и веса
всех нейронов.
Весовые параметры часто хранятся вне приложения, например в файлах JSON, базах данных или облачных хранилищах. Поддерживаются любые методы получения данных, которые позволяют получить объект JSON:
const fs = require('fs');
// Загрузка весов из файла
const rawData = fs.readFileSync('weights.json');
const weightsFromFile = JSON.parse(rawData);
// Создание сети и импорт весов
const net = new brain.NeuralNetwork();
net.fromJSON(weightsFromFile);
Можно использовать аналогичный подход для работы с REST API или облачными хранилищами:
import fetch from 'node-fetch';
async function loadWeights(url) {
const response = await fetch(url);
const weights = await response.json();
const net = new brain.NeuralNetwork();
net.fromJSON(weights);
return net;
}
Совпадение архитектуры сети Сеть, в которую импортируются веса, должна иметь ту же конфигурацию слоёв и нейронов, что и исходная модель. Несовпадение приведёт к ошибкам или некорректной работе.
Функция активации Если исходная сеть использует,
например, relu, необходимо задать ту же функцию активации
при создании новой сети, иначе поведение будет отличаться.
Тип сети Brain.js поддерживает несколько типов
сетей: NeuralNetwork, LSTM,
recurrent.LSTM. Веса одной архитектуры не совместимы с
другой.
Поддержка lookup-таблиц При работе с
категориальными данными важно импортировать inputLookup и
outputLookup. Эти таблицы обеспечивают корректное
преобразование категорий в числовые значения и обратно.
Импорт весов из внешних источников обеспечивает гибкость и масштабируемость нейронных сетей на базе Brain.js, позволяя создавать распределённые системы, оптимизировать обучение и повторно использовать обученные модели в различных средах.