Эффективная работа нейронной сети напрямую зависит от качества и формата входных данных. Библиотека Synaptic в JavaScript предоставляет гибкие инструменты для создания и обучения сетей, однако требует строгого соблюдения правил подготовки данных для корректного обучения.
Сеть Synaptic принимает данные в виде массивов чисел с плавающей точкой. Каждый входной вектор должен соответствовать числу входных нейронов сети, а каждый выходной — числу выходных нейронов.
Пример структуры данных:
const trainingSet = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
input — массив длиной равной количеству входных
нейронов.output — массив длиной равной количеству выходных
нейронов.Для корректного обучения крайне важно нормализовать данные. Ненормализованные значения могут привести к нестабильной работе сети или медленной сходимости. Основные подходы:
Минимум–максимум Перевод значений в диапазон
[0,1]:
function normalize(value, min, max) {
return (value - min) / (max - min);
}Z-score нормализация Центрирование и масштабирование через среднее и стандартное отклонение:
function zScore(value, mean, std) {
return (value - mean) / std;
}Для категориальных данных применяется one-hot кодирование, где каждая категория представляется отдельным входным нейроном с бинарным значением:
// Пример one-hot кодирования для 3 категорий
// Категория 0 → [1, 0, 0]
// Категория 1 → [0, 1, 0]
// Категория 2 → [0, 0, 1]
Для оценки качества сети данные делят на тренировочную и тестовую выборки. Рекомендуемое соотношение — 70–80% данных для обучения, 20–30% — для тестирования.
function splitData(data, trainRatio = 0.8) {
const trainSize = Math.floor(data.length * trainRatio);
return {
train: data.slice(0, trainSize),
test: data.slice(trainSize)
};
}
Корректное разделение важно для выявления переобучения и проверки способности сети к обобщению.
Текстовые данные Текст необходимо кодировать в
числовой формат, например через Bag of Words или
TF-IDF. Прямое использование строк в Synaptic
невозможно.
Изображения Пиксели переводятся в одномерный
массив чисел [0,1]. Размер массива должен совпадать с
количеством входных нейронов:
const flattenedImage = imageData.data.map(pixel => pixel / 255);
function createSlidingWindows(series, windowSize) {
const windows = [];
for (let i = 0; i <= series.length - windowSize - 1; i++) {
windows.push({
input: series.slice(i, i + windowSize),
output: [series[i + windowSize]]
});
}
return windows;
}
undefined, null,
NaN).Правильная подготовка входных данных существенно повышает эффективность обучения сети в Synaptic и уменьшает риск ошибок при работе с различными типами задач.