Система событий в Mind.js обеспечивает эффективное взаимодействие между различными компонентами нейросетевых моделей и управляет потоками данных внутри приложения. Она построена на принципах наблюдателя (Observer pattern), что позволяет подписываться на события и реагировать на них асинхронно, без нарушения логики основного процесса.
1. События (Events) События представляют собой сигналы о наступлении определённых состояний или изменений внутри нейросети. Каждый объект Mind.js может генерировать события, которые содержат полезные данные о произошедших изменениях.
Ключевые характеристики событий:
Пример генерации события:
const mind = new Mind();
mind.emit('layerActivated', { layer: 2, neurons: 128 });
Подписка осуществляется через метод on, который
связывает функцию-обработчик с конкретным типом события. Обработчики
могут быть синхронными и асинхронными.
mind.on('layerActivated', (data) => {
console.log(`Активирован слой ${data.layer} с ${data.neurons} нейронами`);
});
Особенности подписки:
off.const handler = (data) => console.log(data);
mind.on('trainingComplete', handler);
mind.off('trainingComplete', handler);
Mind.js предоставляет набор встроенных событий для отслеживания работы нейросети:
| Событие | Назначение |
|---|---|
trainingStart |
Инициация процесса обучения |
trainingProgress |
Обновление прогресса обучения |
trainingComplete |
Завершение обучения |
layerActivated |
Активация слоя нейросети |
error |
Обработка ошибок выполнения |
Эти события позволяют интегрировать нейросеть в сложные приложения, отслеживать её состояние и реагировать на критические события без вмешательства в основную логику модели.
Mind.js поддерживает асинхронную обработку событий, что особенно
важно при работе с большими данными или обучением на GPU. Асинхронные
обработчики создаются с использованием async функций:
mind.on('trainingProgress', async (data) => {
await saveProgressToDatabase(data);
});
Асинхронные обработчики не блокируют основной поток исполнения, позволяя параллельно выполнять другие задачи.
При подписке на события можно указывать контекст (this)
для обработки внутри метода объекта. Это позволяет использовать
внутренние свойства и методы класса без привязки к внешним
переменным:
mind.on('layerActivated', function(data) {
this.logLayerActivation(data.layer);
}, mind);
Mind.js позволяет назначать приоритет обработчикам событий, что важно при наличии нескольких подписчиков, где один должен срабатывать раньше других.
mind.on('trainingProgress', (data) => console.log('Высокий приоритет'), { priority: 10 });
mind.on('trainingProgress', (data) => console.log('Низкий приоритет'), { priority: 1 });
Обработчики с более высоким приоритетом вызываются раньше.
Система событий используется для:
Событийная система строится на списках подписчиков для каждого типа события и использует очереди вызовов для последовательного или асинхронного исполнения обработчиков. Это обеспечивает предсказуемость и детерминированность поведения даже при большом количестве событий и подписчиков.
Методы emit, on, off и
once формируют полный набор для работы с событиями. Метод
once позволяет подписчику срабатывать только один раз,
после чего автоматически удаляется.
mind.once('trainingComplete', (data) => console.log('Обучение завершено'));
Система событий Mind.js является фундаментальной частью архитектуры библиотеки, обеспечивая гибкость и расширяемость при создании сложных нейросетевых приложений.