Библиотека Synaptic предоставляет инструменты для
построения, обучения и тестирования нейронных сетей в JavaScript. Одним
из ключевых аспектов работы с нейронными сетями является проверка их
качества на данных, которые не использовались при обучении. Для этих
целей используется метод Trainer.test.
Trainer.testМетод Trainer.test предназначен для оценки
производительности сети на тестовой выборке. Он
принимает на вход массив объектов, содержащих входные и
ожидаемые выходные значения, и возвращает статистику качества
сети.
Синтаксис метода:
trainer.test(testSet)
где:
trainer — объект класса Trainer, связанный
с обучаемой сетью.testSet — массив объектов формата
{ input: [...], output: [...] }.Метод возвращает объект с ключевыми метриками, позволяющими оценить точность сети.
Тестовая выборка строится аналогично обучающей:
const testSet = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
Примечание: данные в тестовом наборе не должны пересекаться с обучающими. Иначе оценка может быть завышенной и не отражать реальную способность сети к генерализации.
Метод test возвращает объект с двумя основными
параметрами:
error — среднеквадратичная ошибка
(MSE, mean squared error) по всем образцам теста.
Формула для одной выборки:
[ = _{i=1}^{n} (y_i - _i)^2]
где ( y_i ) — ожидаемый результат, ( _i ) — предсказанный результат сети, ( n ) — количество выходных нейронов.
success — доля корректных
предсказаний, если результат можно оценивать бинарно (0 или 1). Обычно
применяется для классификации.
Пример структуры результата:
{
error: 0.023,
success: 0.95
}
Важно: метрика success имеет смысл
только в задачах классификации. Для регрессии следует ориентироваться на
error.
Для сети, решающей задачу XOR:
const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;
// Создание сети: 2 входа, 3 скрытых нейрона, 1 выход
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const xorNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
const trainer = new Trainer(xorNetwork);
// Обучение сети
trainer.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
], {
rate: 0.3,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000,
cost: Trainer.cost.MSE
});
// Создание тестовой выборки
const testSet = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
// Проверка сети на тестовых данных
const testResult = trainer.test(testSet);
console.log('Ошибка:', testResult.error);
console.log('Успех:', testResult.success);
В этом примере после обучения сеть демонстрирует практически 100% точность на тестовой выборке.
Классификация:
success применяется порог 0.5.Регрессия:
success часто не
используется.error (MSE, SSE или другой
выбранный критерий).Многоклассовые задачи:
success считается
как совпадение индекса максимального значения предсказания и индекса
истинного класса.Качество сети на тестовой выборке напрямую зависит от параметров обучения:
Правильная комбинация этих параметров обеспечивает минимальное
error и максимальный success.
error и
success) для комплексной оценки сети.Метод Trainer.test обеспечивает быструю и
наглядную оценку сети на новых данных, позволяя точно
контролировать способность нейронной сети к обобщению и корректно
подбирать архитектуру и параметры обучения.