Коллбэки в процессе обучения: whileTraining, finishedTraining

В библиотеке ml5.js обучение моделей машинного обучения происходит асинхронно. Для управления процессом и отслеживания прогресса используются коллбэки — функции, которые вызываются автоматически в определённые моменты обучения. Два ключевых события: whileTraining и finishedTraining позволяют получать информацию о ходе обучения и выполнять действия после завершения.


whileTraining

Коллбэк whileTraining вызывается на каждом шаге обучения. Его основной задачей является мониторинг текущего состояния модели, отслеживание ошибок (loss) и визуализация процесса. Он принимает один аргумент — объект с данными о текущем шаге.

Основные свойства объекта в whileTraining:

  • epoch — номер текущей эпохи обучения.
  • loss — значение функции потерь на данной итерации.
  • batch — номер текущей партии данных (batch).
  • accuracy — точность модели (для классификационных задач), если она доступна.
  • progress — относительный прогресс обучения, выраженный числом от 0 до 1.

Пример использования:

const options = {
  epochs: 50,
  batchSize: 32,
  learningRate: 0.01,
  // Коллбэк для отслеживания процесса
  whileTraining: function(info) {
    console.log(`Эпоха: ${info.epoch}, Потери: ${info.loss.toFixed(4)}`);
  }
};

const nn = ml5.neuralNetwork(options);
nn.train(trainingData, options);

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

Рекомендации при использовании whileTraining:

  • Не нагружать коллбэк сложными вычислениями или DOM-операциями, чтобы не замедлять обучение.
  • Использовать для графического отображения прогресса или логирования ошибок.
  • Применять для динамического подбора гиперпараметров в процессе обучения, если задача требует адаптивного подхода.

finishedTraining

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

Синтаксис:

nn.train(trainingData, {
  epochs: 50,
  batchSize: 32,
  finishedTraining: function() {
    console.log("Обучение завершено");
    nn.predict(newData, function(err, results) {
      console.log(results);
    });
  }
});

Особенности finishedTraining:

  • Гарантирует, что модель полностью обучена.
  • Используется для инициализации интерфейсов или запуска процессов, зависящих от обученной модели.
  • Часто комбинируется с функцией сохранения модели: nn.save().
  • Можно запускать последующие эксперименты с той же моделью без риска обращения к неготовой сети.

Взаимодействие whileTraining и finishedTraining

Эти коллбэки работают совместно, обеспечивая полный контроль над процессом обучения:

  1. whileTraining — непрерывный мониторинг, визуализация, логирование.
  2. finishedTraining — однократное действие после завершения, подготовка модели к использованию.

Пример комплексного применения:

const nn = ml5.neuralNetwork({ task: 'regression', debug: true });

nn.addData({ x: 1 }, { y: 2 });
nn.addData({ x: 2 }, { y: 4 });
nn.normalizeData();

nn.train({
  epochs: 100,
  whileTraining: info => {
    if (info.epoch % 10 === 0) {
      console.log(`Эпоха ${info.epoch}, Потери ${info.loss.toFixed(3)}`);
    }
  },
  finishedTraining: () => {
    console.log("Модель готова");
    nn.predict({ x: 5 }, (err, results) => {
      console.log("Прогноз:", results[0].value);
    });
  }
});

В этом примере:

  • Каждые 10 эпох выводятся текущие потери.
  • После завершения обучения сразу выполняется предсказание на новых данных.

Практические советы

  • Для длинного обучения рекомендуется визуализировать прогресс через whileTraining, чтобы понимать динамику сходимости.
  • Если модель не обучается или потери не снижаются, коллбэк whileTraining помогает выявить проблемы: слишком большой learning rate, плохое нормирование данных или несбалансированные выборки.
  • Использование finishedTraining позволяет корректно управлять асинхронностью: все действия с моделью начинаются только после её готовности.

Заключение по работе коллбэков в ml5.js

whileTraining и finishedTraining формируют основной механизм контроля обучения моделей в ml5.js. whileTraining — инструмент мониторинга и анализа динамики, finishedTraining — точка старта для использования готовой модели. Их правильное применение позволяет организовать прозрачный, управляемый процесс обучения и интегрировать модели в интерактивные приложения.