Brain.js предоставляет возможность создавать и обучать нейронные сети на данных, которые можно хранить и загружать из внешних файлов. Эффективная работа с файлами позволяет масштабировать обучение и интегрировать сеть с реальными источниками данных.
Для большинства задач машинного обучения удобно использовать формат JSON. Он позволяет структурировать данные в виде массивов объектов с входными и выходными значениями.
const fs = require('fs');
const rawData = fs.readFileSync('data.json', 'utf8');
const trainingData = JSON.parse(rawData);
В данном примере:
fs.readFileSync синхронно читает файл;JSON.parse преобразует строку в объект JavaScript;trainingData должна соответствовать формату
Brain.js:[
{ input: { feature1: 0, feature2: 1 }, output: { result: 1 } },
{ input: { feature1: 1, feature2: 0 }, output: { result: 0 } }
]
Данные, полученные из файла, часто требуют нормализации или преобразования. Neural networks в Brain.js лучше обучаются на числовых значениях от 0 до 1.
Пример нормализации:
function normalizeData(data) {
return data.map(item => ({
input: {
feature1: item.input.feature1 / 100,
feature2: item.input.feature2 / 100
},
output: {
result: item.output.result
}
}));
}
const normalizedData = normalizeData(trainingData);
Это предотвращает переполнение и улучшает сходимость нейронной сети.
Для больших наборов данных синхронное чтение может блокировать поток выполнения. Рекомендуется использовать асинхронные методы:
fs.readFile('largeData.json', 'utf8', (err, data) => {
if (err) throw err;
const trainingData = JSON.parse(data);
// дальнейшая обработка
});
Также можно использовать потоки (streams) для построчной
обработки:
const readline = require('readline');
const stream = require('fs').createReadStream('largeData.json');
const rl = readline.createInterface({ input: stream });
const trainingData = [];
rl.on('line', line => {
trainingData.push(JSON.parse(line));
});
rl.on('close', () => {
// данные готовы к обучению
});
Такой подход снижает нагрузку на оперативную память и позволяет обрабатывать огромные файлы.
Иногда источники данных предоставляют CSV-файлы. Для их обработки
используется пакет csv-parse:
const fs = require('fs');
const parse = require('csv-parse');
const trainingData = [];
fs.createReadStream('data.csv')
.pipe(parse({ columns: true, trim: true }))
.on('data', row => {
trainingData.push({
input: { feature1: parseFloat(row.feature1), feature2: parseFloat(row.feature2) },
output: { result: parseFloat(row.result) }
});
})
.on('end', () => {
// данные готовы к обучению
});
Особенности работы с CSV:
columns: true автоматически использует первую строку
как названия полей;trim: true удаляет лишние пробелы;parseFloat
или Number.В некоторых случаях данные поступают из API или базы данных. Их можно преобразовать в формат Brain.js напрямую без сохранения в файл:
async function fetchTrainingData() {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data.map(item => ({
input: item.features,
output: item.labels
}));
}
Такой подход особенно удобен при создании моделей, которые обучаются на постоянно обновляющихся данных.
После обучения модели можно сохранять её состояние в файл и загружать позже:
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
net.train(normalizedData);
const modelJSON = net.toJSON();
fs.writeFileSync('model.json', JSON.stringify(modelJSON));
Для повторного использования:
const savedModel = JSON.parse(fs.readFileSync('model.json', 'utf8'));
const net = new brain.NeuralNetwork();
net.fromJSON(savedModel);
Это позволяет разделять процесс обучения и использование сети, экономя ресурсы.
input и
output для каждой записи.toJSON/fromJSON упрощает повторное
использование сети.Загрузка и подготовка данных являются фундаментальными этапами работы с нейронными сетями, обеспечивая корректное обучение и высокую точность предсказаний.