Сверточные нейронные сети (Convolutional Neural Networks, CNN) являются ключевым инструментом для обработки изображений и пространственных данных. В JavaScript они реализуются с использованием библиотеки TensorFlow.js, которая предоставляет полный набор инструментов для создания, обучения и оценки моделей прямо в браузере или на сервере через Node.js.
Архитектура простой сверточной сети обычно включает несколько типов слоев:
Каждый слой выполняет специфическую функцию, формируя иерархическое представление данных.
Сверточный слой служит для выделения локальных признаков изображения. В TensorFlow.js его можно создать с помощью:
const model = tf.sequential();
model.add(tf.layers.conv2d({
inputShape: [28, 28, 1], // высота, ширина, количество каналов
filters: 32, // количество фильтров
kernelSize: 3, // размер ядра свертки
strides: 1, // шаг свертки
activation: 'relu', // функция активации
padding: 'same' // padding, сохраняющий размер изображения
}));
Ключевые параметры:
filters – количество обучаемых фильтров, определяющих
число выходных каналов.kernelSize – размер ядра, которое сканирует
изображение.strides – шаг перемещения ядра.activation – функция активации, обычно ReLU для
устранения линейности.padding – способ обработки границ изображения
(same или valid).Слои max pooling или average pooling уменьшают размерность данных, сохраняя основные признаки. Это снижает вычислительные затраты и повышает устойчивость к смещениям объектов на изображении.
model.add(tf.layers.maxPooling2d({
poolSize: [2, 2],
strides: [2, 2]
}));
poolSize задает размер окна для агрегации.strides определяет шаг окна.Pooling слои помогают сети концентрироваться на наиболее значимых признаках.
Для ускорения сходимости и стабилизации обучения применяются слои BatchNormalization:
model.add(tf.layers.batchNormalization());
Активации применяются после свертки и нормализации. ReLU остаётся
стандартом для скрытых слоев, а для выходного слоя могут использоваться
softmax или sigmoid в зависимости от задачи
классификации.
После серии сверток и подвыборок формируется одномерный вектор
признаков через слой Flatten:
model.add(tf.layers.flatten());
Далее добавляются полносвязные слои:
model.add(tf.layers.dense({
units: 128,
activation: 'relu'
}));
units – количество нейронов слоя.Для многоклассовой классификации используют слой с softmax:
model.add(tf.layers.dense({
units: 10,
activation: 'softmax'
}));
units = количество классов.softmax преобразует выходы в вероятности для каждого
класса.Для бинарной классификации используется sigmoid:
model.add(tf.layers.dense({
units: 1,
activation: 'sigmoid'
}));
Перед обучением модель компилируется с указанием функции потерь, оптимизатора и метрик:
model.compile({
optimizer: tf.train.adam(),
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
optimizer – алгоритм градиентного спуска
(adam, sgd и др.).loss – функция потерь
(categoricalCrossentropy для многоклассовой,
binaryCrossentropy для бинарной классификации).metrics – список метрик для отслеживания
прогресса.Обучение выполняется методом fit или
fitDataset:
await model.fit(trainX, trainY, {
epochs: 10,
batchSize: 32,
validationSplit: 0.2
});
epochs – количество проходов по всему обучающему
набору.batchSize – размер мини-батча.validationSplit – доля данных для проверки качества
обучения.Простая архитектура CNN в TensorFlow.js строится как последовательность слоев: свертка → активация → pooling → нормализация → flatten → dense → output. Такая схема обеспечивает эффективное выделение признаков и адаптивное обучение на изображениях, позволяя быстро создавать модели прямо в браузере или на сервере.
С помощью TensorFlow.js легко настраивать параметры слоев, экспериментировать с глубиной сети и функциями активации, что делает библиотеку гибкой и мощной для визуальных задач.