В библиотеке Synaptic объект Trainer служит для организации процесса обучения нейронной сети. Он предоставляет высокоуровневые методы для управления обучением, включая настройку параметров, обучение с различными видами данных и контроль точности сети. Trainer является удобным инструментом для автоматизации повторяющихся операций обучения и упрощения интеграции нейросетей в приложения.
Для создания Trainer используется конструктор:
const trainer = new synaptic.Trainer(network);
Параметры конструктора:
network — объект сети, который будет обучаться. Это
может быть любой экземпляр класса Layer или
Network.Пример:
const { Layer, Network, Trainer } = require('synaptic');
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
const trainer = new Trainer(myNetwork);
В этом примере создается трехслойная сеть и объект Trainer, связанный с этой сетью.
Trainer предоставляет несколько методов для обучения сети и анализа результатов. Основные из них:
Метод train используется для непосредственного обучения
сети.
Параметры:
trainingSet — массив объектов с полями
input и output, представляющих обучающие
данные.
options — объект с настройками обучения:
rate — скорость обучения (по умолчанию 0.3).iterations — количество итераций обучения (по умолчанию
20000).error — минимальная допустимая ошибка (по умолчанию
0.005).shuffle — флаг перемешивания данных на каждой итерации
(по умолчанию true).log — интервал логирования ошибок (число или
функция).cost — функция вычисления ошибки
(Trainer.cost.MSE по умолчанию).Пример использования:
const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
trainer.train(trainingData, {
rate: 0.1,
iterations: 5000,
error: 0.005,
log: 100,
cost: Trainer.cost.MSE
});
Асинхронная версия метода train, позволяющая не
блокировать основной поток выполнения. Полезна при работе с большими
наборами данных. Возвращает Promise, который завершает
работу после окончания обучения.
Метод test оценивает точность сети на тестовом наборе
данных. Возвращает объект с метриками: средняя ошибка, количество
корректных и некорректных ответов.
const results = trainer.test([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] }
]);
console.log(results);
Метод export позволяет сохранить обученную сеть в виде
JSON для последующего восстановления:
const exportedNetwork = trainer.export();
Trainer поддерживает несколько стандартных функций стоимости ошибки:
Можно задавать пользовательские функции стоимости:
Trainer.cost.myCustomCost = function(target, output) {
let sum = 0;
for (let i = 0; i < target.length; i++) {
sum += Math.abs(target[i] - output[i]);
}
return sum / target.length;
};
И затем использовать в train:
trainer.train(trainingData, { cost: Trainer.cost.myCustomCost });
Перемешивание данных: По умолчанию
shuffle установлен в true, что предотвращает
заучивание порядка данных и улучшает обобщающую способность
сети.
Логирование: Параметр log позволяет
отслеживать прогресс обучения. Можно указать число (интервал итераций)
или функцию, которая получает текущий объект options и
может выводить дополнительные данные.
Поддержка асинхронности: Для больших сетей и
наборов данных рекомендуется использовать trainAsync, чтобы
не блокировать интерфейс или основной поток приложения.
Гибкость: Trainer совместим с любыми сетями Synaptic, включая сложные многослойные и рекуррентные архитектуры. Это делает его универсальным инструментом для обучения и тестирования сетей.
Обучение сети XOR: Традиционный пример использования Trainer для обучения сети решать задачу XOR.
Распознавание образов: Trainer может использоваться для обучения нейросетей на изображениях или векторных представлениях данных, с использованием MSE или кросс-энтропии в зависимости от типа задачи.
Предсказание временных рядов: С асинхронным
методом trainAsync возможно обучение рекуррентных сетей на
больших временных данных, обеспечивая контроль за ошибкой и логирование
прогресса.
Trainer в Synaptic обеспечивает мощный, гибкий и простой в использовании интерфейс для управления процессом обучения нейросетей, позволяя сосредоточиться на архитектуре сети и данных, а не на низкоуровневых деталях обучения.