Brain.js — это библиотека для создания нейронных сетей в JavaScript, предоставляющая удобный интерфейс для обучения, прогнозирования и тестирования моделей. Одной из ключевых возможностей является работа с задачами многоклассовой классификации, где входные данные должны быть распределены по более чем двум категориям.
Для работы с Brain.js требуется Node.js версии 12 и выше. Установка библиотеки производится стандартной командой:
npm install brain.js
После установки можно подключить библиотеку в проекте:
const brain = require('brain.js');
Для многоклассовой классификации в Brain.js чаще всего используется
Feedforward Neural Network (NeuralNetwork)
или её расширение NeuralNetworkGPU, если требуется
ускорение на видеокарте. Структура сети подбирается с учётом сложности
задачи и объёма данных.
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 10], // две скрытые слоя по 10 нейронов
activation: 'relu' // функция активации ReLU
});
sigmoid или relu.В многоклассовой классификации важно правильно представлять выходные данные. Brain.js использует one-hot encoding, где каждая категория кодируется вектором:
const trainingData = [
{ input: [0, 1], output: { cat: 1 } },
{ input: [1, 0], output: { dog: 1 } },
{ input: [1, 1], output: { bird: 1 } }
];
Процесс обучения контролируется методом train, который
принимает массив данных и параметры тренировки:
net.train(trainingData, {
iterations: 20000, // количество эпох
errorThresh: 0.005, // допустимая ошибка
log: true, // вывод прогресса
logPeriod: 1000, // интервал вывода
learningRate: 0.3 // скорость обучения
});
После обучения сеть способна классифицировать новые входные данные.
Метод run возвращает объект с вероятностями для каждого
класса:
const output = net.run([1, 0]);
console.log(output);
// пример результата: { cat: 0.1, dog: 0.85, bird: 0.05 }
Чтобы определить итоговый класс, необходимо выбрать ключ с максимальным значением вероятности:
const predictedClass = Object.keys(output).reduce((a, b) => output[a] > output[b] ? a : b);
console.log(predictedClass); // dog
relu часто работает
быстрее и эффективнее на сложных данных, а sigmoid лучше
для небольших задач.Разделение данных на тренировочные и тестовые важно для проверки обобщающей способности сети:
const testData = [
{ input: [0, 1], expected: 'cat' },
{ input: [1, 0], expected: 'dog' }
];
testData.forEach(item => {
const output = net.run(item.input);
const predicted = Object.keys(output).reduce((a, b) => output[a] > output[b] ? a : b);
console.log(`Ожидаемый: ${item.expected}, Предсказанный: ${predicted}`);
});
const json = net.toJSON();
const net2 = new brain.NeuralNetwork();
net2.fromJSON(json);
Многоклассовая классификация в Brain.js обеспечивает удобный и наглядный способ создания нейронных сетей на JavaScript, позволяя гибко настраивать архитектуру, контролировать процесс обучения и эффективно прогнозировать новые данные.