Загрузка данных из файлов

Brain.js предоставляет возможность создавать и обучать нейронные сети на данных, которые можно хранить и загружать из внешних файлов. Эффективная работа с файлами позволяет масштабировать обучение и интегрировать сеть с реальными источниками данных.

Чтение данных из JSON

Для большинства задач машинного обучения удобно использовать формат 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-файлы. Для их обработки используется пакет 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 для каждой записи.
  • Нормализация: числа должны находиться в диапазоне 0–1.
  • Асинхронная обработка: обязательна для больших файлов.
  • Форматы файлов: JSON и CSV — наиболее удобные для Brain.js.
  • Сохранение модели: toJSON/fromJSON упрощает повторное использование сети.

Загрузка и подготовка данных являются фундаментальными этапами работы с нейронными сетями, обеспечивая корректное обучение и высокую точность предсказаний.