ml5.js предоставляет высокоуровневый интерфейс для работы с машинным обучением на JavaScript, основанный на TensorFlow.js. Одной из ключевых возможностей является настройка и определение архитектуры нейронной сети вручную для задач классификации, регрессии, генерации и других.
Для ручного определения архитектуры используется класс
ml5.neuralNetwork. При его создании можно задавать тип
задачи, структуру входов и выходов, а также гиперпараметры обучения.
Пример базовой конфигурации:
const options = {
task: 'classification', // или 'regression'
debug: true
};
const nn = ml5.neuralNetwork(options);
Ключевой момент: по умолчанию сеть создается с одной скрытой слоем, если не указано иное. Для сложных задач необходимо вручную добавлять слои с конкретным количеством нейронов и функцией активации.
Метод addLayer позволяет детально настроить каждый
слой:
nn.addLayer({
type: 'dense',
units: 64,
activation: 'relu'
});
nn.addLayer({
type: 'dense',
units: 32,
activation: 'relu'
});
nn.addLayer({
type: 'dense',
units: 10,
activation: 'softmax'
});
type: тип слоя, чаще всего 'dense' для
полносвязных слоев. Также поддерживаются conv2d,
lstm и другие.units: количество нейронов в слое.activation: функция активации. Популярные функции —
'relu', 'sigmoid', 'tanh',
'softmax'.Особенность ml5.js: слои добавляются в порядке их включения, поэтому порядок имеет критическое значение.
При создании сети можно задать гиперпараметры обучения через метод
train:
const trainingOptions = {
epochs: 50,
batchSize: 32,
learningRate: 0.01
};
nn.train(trainingData, trainingOptions, whileTraining, finishedTraining);
epochs: количество проходов по всему набору
данных.batchSize: размер мини-батча для обновления весов.learningRate: скорость обучения, важна для сходимости
сети.whileTraining: функция обратного вызова, вызываемая на
каждой эпохе, для отслеживания прогресса.finishedTraining: функция, выполняемая после завершения
обучения.При ручном определении архитектуры важно точно указать размерность данных:
nn.addData({input1: 0.5, input2: 0.2}, {label: 'class1'});
softmax.ml5.js автоматически применяет стандартную инициализацию весов для плотных слоев, но при ручной настройке можно экспериментировать с различными функциями активации для каждого слоя. Например:
relu — эффективна для скрытых слоев, ускоряет
обучение.sigmoid — подходит для выхода в диапазоне [0,1].softmax — необходима для многоклассовой
классификации.В ml5.js можно задавать оптимизаторы и параметры регуляризации через TensorFlow.js:
const options = {
optimizer: 'adam',
learningRate: 0.001,
loss: 'categoricalCrossentropy'
};
'adam' подходит для большинства задач.loss) должны соответствовать типу задачи:
'categoricalCrossentropy' для многоклассовой классификации,
'meanSquaredError' для регрессии.После обучения сети можно сохранить её структуру и веса для последующего использования:
nn.save('myCustomNetwork');
Загрузка происходит через:
ml5.neuralNetwork({task: 'classification'}, 'myCustomNetwork/model.json')
.then(nn => {
// Сеть готова к предсказаниям
});
Это позволяет использовать заранее обученные архитектуры без повторного обучения.
После обучения и сохранения архитектуры сеть используется для
предсказаний методом predict:
nn.predict({input1: 0.6, input2: 0.1}, (err, results) => {
console.log(results);
});
results содержит массив объектов с вероятностями для
каждого класса или значениями регрессии.whileTraining для выявления переобучения.Ручное определение архитектуры в ml5.js дает полный контроль над структурой сети и параметрами обучения, позволяя создавать модели, адаптированные под конкретные задачи классификации и регрессии, при этом сохраняя простоту работы через высокоуровневый API.