Для работы с Mind.js требуется Node.js версии не ниже 12 и современный браузер для фронтенд-реализаций. Установка через npm выполняется командой:
npm install mind
После установки библиотеку можно подключить в проекте:
const { Mind, Layer, Neuron } = require('mind');
Для фронтенд-проектов возможно подключение через тег
с CDN:
Организация кода критична для масштабируемых проектов. Рекомендуется делить проект на следующие модули:
config/network.js содержит параметры слоёв, нейронов,
функций активации:module.exports = {
layers: [
{ type: 'input', size: 3 },
{ type: 'hidden', size: 5, activation: 'relu' },
{ type: 'output', size: 2, activation: 'softmax' }
],
learningRate: 0.01,
epochs: 1000
};
models/neuralNetwork.js отвечает за создание и
инициализацию сети:const { Mind, Layer } = require('mind');
const config = require('../config/network');
function createNetwork() {
const mind = new Mind({ learningRate: config.learningRate });
config.layers.forEach(layerConfig => {
mind.addLayer(new Layer(layerConfig));
});
return mind;
}
module.exports = createNetwork;
train/trainNetwork.js содержит функции обучения и оценки
модели:const createNetwork = require('../models/neuralNetwork');
function trainNetwork(data) {
const network = createNetwork();
data.forEach(sample => {
network.train(sample.input, sample.output);
});
return network;
}
function evaluateNetwork(network, testData) {
return testData.map(sample => ({
input: sample.input,
predicted: network.predict(sample.input),
actual: sample.output
}));
}
module.exports = { trainNetwork, evaluateNetwork };
Каждый слой нейронной сети лучше оформлять как отдельный класс с методами:
forward(input) — прямое распространение сигнала;backward(error) — обратное распространение ошибки;updateWeights() — корректировка весов после
обучения.Пример реализации слоя:
const { Neuron } = require('mind');
class CustomLayer {
constructor(size, activation) {
this.neurons = Array.from({ length: size }, () => new Neuron(activation));
}
forward(inputs) {
return this.neurons.map(neuron => neuron.activate(inputs));
}
backward(errors) {
this.neurons.forEach((neuron, i) => neuron.propagate(errors[i]));
}
updateWeights(learningRate) {
this.neurons.forEach(neuron => neuron.update(learningRate));
}
}
module.exports = CustomLayer;
Для работы с сетью требуется разделение данных на тренировочные и
тестовые наборы. Используется отдельный модуль
data/dataHandler.js:
function splitData(dataset, testRatio = 0.2) {
const shuffled = dataset.sort(() => 0.5 - Math.random());
const testSize = Math.floor(dataset.length * testRatio);
return {
train: shuffled.slice(0, dataset.length - testSize),
test: shuffled.slice(dataset.length - testSize)
};
}
function normalizeData(dataset) {
return dataset.map(sample => ({
input: sample.input.map(x => x / 255),
output: sample.output
}));
}
module.exports = { splitData, normalizeData };
Для крупных проектов важно вести журнал обучения сети. Создается
модуль utils/logger.js:
function logTraining(epoch, loss) {
console.log(`Эпоха ${epoch}: потеря = ${loss.toFixed(4)}`);
}
function logEvaluation(results) {
results.forEach((res, index) => {
console.log(`Пример ${index + 1}: предсказано = ${res.predicted}, фактически = ${res.actual}`);
});
}
module.exports = { logTraining, logEvaluation };
forward и backward проверяются на
корректность вычислений градиентов.Пример оптимальной структуры:
/project-root
├─ config/
│ └─ network.js
├─ models/
│ └─ neuralNetwork.js
├─ layers/
│ └─ customLayer.js
├─ train/
│ └─ trainNetwork.js
├─ data/
│ └─ dataHandler.js
├─ utils/
│ └─ logger.js
├─ tests/
│ ├─ layers.test.js
│ └─ network.test.js
└─ index.js
Такое разделение упрощает поддержку кода, масштабирование проекта и повторное использование компонентов.