Для интеграции нейронных сетей в приложение на Express сначала необходимо установить саму библиотеку Brain.js и менеджер пакетов npm. Используется стандартная установка через терминал:
npm install brain.js
После этого библиотеку подключают в проекте следующим образом:
const brain = require('brain.js');
Express-приложение обычно имеет структуру с файлом
app.js или server.js. В этом файле создаётся
экземпляр приложения:
const express = require('express');
const app = express();
app.use(express.json());
Подключение Brain.js в таком контексте позволяет использовать нейронные сети для обработки данных прямо в маршрутах сервера.
Brain.js предоставляет несколько типов сетей:
NeuralNetwork, LSTMNetwork,
recurrent.LSTM. Для простых задач классификации и
прогнозирования чаще используется NeuralNetwork.
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 10],
learningRate: 0.01
});
Параметры сети:
hiddenLayers — массив чисел, задающий количество
нейронов в скрытых слоях.learningRate — коэффициент скорости обучения.Обучение сети происходит на примерах входных и выходных данных:
const trainingData = [
{ input: { red: 1, green: 0, blue: 0 }, output: { color: 1 } },
{ input: { red: 0, green: 1, blue: 0 }, output: { color: 0 } }
];
net.train(trainingData, {
iterations: 20000,
errorThresh: 0.005,
log: true,
logPeriod: 1000
});
Пояснения параметров тренировки:
iterations — максимальное количество циклов
обучения.errorThresh — порог ошибки, при достижении которого
обучение останавливается.log и logPeriod — позволяют отслеживать
процесс обучения.После обучения нейронной сети можно обрабатывать запросы через API. Пример POST-маршрута, который получает данные цвета и возвращает предсказание:
app.post('/predict', (req, res) => {
const input = req.body;
const output = net.run(input);
res.json(output);
});
Особенности интеграции:
express.json() необходим для корректного парсинга
JSON-тела запроса.req.body содержит входные данные для нейронной
сети.res.json(output) возвращает предсказание
клиенту.Для постоянного использования сети после обучения можно сохранить её состояние в файл:
const fs = require('fs');
const json = net.toJSON();
fs.writeFileSync('network.json', JSON.stringify(json));
Загрузка сети из файла:
const savedNet = new brain.NeuralNetwork();
const data = fs.readFileSync('network.json');
savedNet.fromJSON(JSON.parse(data));
Это позволяет не обучать сеть заново при каждом запуске приложения, что особенно важно для крупных сетей.
Для работы с пользовательскими данными часто используют формы на фронтенде, которые отправляют JSON на сервер. Пример структуры данных:
{
"red": 0.2,
"green": 0.5,
"blue": 0.3
}
На сервере:
app.post('/classify-color', (req, res) => {
const colorData = req.body;
const prediction = net.run(colorData);
res.json({ predictedClass: prediction });
});
Для больших проектов целесообразно выделять отдельный модуль для работы с нейронной сетью:
// neuralNetwork.js
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
function trainNetwork(trainingData) {
net.train(trainingData);
}
function predict(input) {
return net.run(input);
}
module.exports = { trainNetwork, predict };
И использовать его в маршрутах:
const { predict } = require('./neuralNetwork');
app.post('/predict', (req, res) => {
const result = predict(req.body);
res.json(result);
});
Хотя Brain.js выполняет обучение синхронно, в Express важно использовать try-catch для обработки возможных исключений:
app.post('/predict', (req, res) => {
try {
const result = net.run(req.body);
res.json(result);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Для больших сетей обучение можно выполнять в отдельном процессе или через worker threads, чтобы не блокировать основной поток Express:
const { Worker } = require('worker_threads');
function trainInWorker(data) {
return new Promise((resolve, reject) => {
const worker = new Worker('./trainWorker.js', { workerData: data });
worker.on('message', resolve);
worker.on('error', reject);
});
}
Рекомендации:
learningRate и iterations
позволяет достичь баланса между точностью и скоростью.Brain.js легко интегрируется с:
Пример с кэшированием результата:
const redis = require('redis');
const client = redis.createClient();
app.post('/predict', async (req, res) => {
const key = JSON.stringify(req.body);
const cached = await client.get(key);
if (cached) return res.json(JSON.parse(cached));
const result = net.run(req.body);
await client.set(key, JSON.stringify(result));
res.json(result);
});
Эта структура позволяет создавать мощные и производительные API на Express, использующие нейронные сети Brain.js для анализа данных, классификации и прогнозирования в реальном времени.