Коллбэки log и callbackPeriod

Библиотека Brain.js предоставляет удобные инструменты для создания и обучения нейронных сетей на JavaScript. При обучении сетей часто возникает необходимость контролировать процесс обучения: отслеживать ошибки, визуализировать динамику изменения функции потерь и реагировать на определённые события. Для этого в Brain.js используются параметры log и callbackPeriod в методе .train().


Параметр log

log позволяет вести запись процесса обучения. Он может быть представлен либо функцией, либо логическим значением true.

  • log: true При таком значении библиотека автоматически выводит в консоль значения ошибки после каждой итерации или через период, заданный callbackPeriod. Это быстрый способ наблюдать за прогрессом без написания собственной функции.

  • log: функция Если требуется более гибкая обработка, можно передать свою функцию. Эта функция получает один аргумент — объект с текущими параметрами обучения, среди которых:

    • error — текущая ошибка сети на обучающей выборке;
    • iteration — номер текущей итерации;
    • rate — используемый коэффициент обучения;
    • time — время, затраченное на обучение до текущей итерации.

Пример использования функции для логирования:

const net = new brain.NeuralNetwork();

net.train(trainingData, {
  iterations: 1000,
  log: stats => {
    console.log(`Итерация ${stats.iteration}, Ошибка: ${stats.error.toFixed(4)}`);
  },
  learningRate: 0.3
});

Здесь логирование позволяет видеть точное значение ошибки после каждой итерации или выбранного интервала.


Параметр callbackPeriod

callbackPeriod определяет интервал, через который вызывается логирование или функция коллбэка. Значение задаётся в количестве итераций.

  • Если callbackPeriod не задан, при log: true или log: функция вызовы происходят после каждой итерации по умолчанию.
  • Пример: callbackPeriod: 10 означает, что логирование или функция обратного вызова будут вызываться каждые 10 итераций.

Использование вместе с функцией log:

const net = new brain.NeuralNetwork();

net.train(trainingData, {
  iterations: 100,
  log: stats => console.log(`Итерация ${stats.iteration}: ошибка ${stats.error}`),
  callbackPeriod: 5,
  learningRate: 0.2
});

В этом примере информация о состоянии сети выводится каждые 5 итераций, что уменьшает количество сообщений в консоли при большом количестве итераций.


Комбинирование log и callbackPeriod

Параметры можно использовать совместно для тонкой настройки мониторинга процесса обучения:

  • Сокращение нагрузки на консоль: при большом объёме данных или тысячах итераций постоянный вывод затруднителен. Установка callbackPeriod позволяет получать статистику с нужной периодичностью.
  • Пользовательские действия по прогрессу: вместо простого вывода в консоль, в функцию log можно передавать данные в график, сохранять их в массив для последующего анализа или выводить уведомления при достижении заданного порога ошибки.

Пример сохранения прогресса обучения:

let progress = [];

net.train(trainingData, {
  iterations: 500,
  log: stats => progress.push({ iteration: stats.iteration, error: stats.error }),
  callbackPeriod: 10,
  learningRate: 0.1
});

console.log(progress);

В этом случае массив progress будет содержать данные о каждом 10-м шаге обучения, позволяя строить графики или анализировать динамику ошибки.


Практические рекомендации

  • Большие обучающие выборки: рекомендуется использовать callbackPeriod, чтобы не перегружать консоль.
  • Динамическое изменение логирования: функция log может включать условия для отображения информации только при определённых значениях ошибки.
  • Отладка сети: временное включение log: true помогает быстро убедиться, что сеть обучается и ошибка уменьшается.

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