Архитектура простой CNN

Сверточные нейронные сети (Convolutional Neural Networks, CNN) являются ключевым инструментом для обработки изображений и пространственных данных. В JavaScript они реализуются с использованием библиотеки TensorFlow.js, которая предоставляет полный набор инструментов для создания, обучения и оценки моделей прямо в браузере или на сервере через Node.js.


Структура CNN

Архитектура простой сверточной сети обычно включает несколько типов слоев:

  1. Сверточные слои (Conv2D)
  2. Слои подвыборки (Pooling)
  3. Слои нормализации и активации
  4. Полносвязные слои (Dense)
  5. Выходной слой (Output Layer)

Каждый слой выполняет специфическую функцию, формируя иерархическое представление данных.


Сверточные слои

Сверточный слой служит для выделения локальных признаков изображения. В 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).

Слои подвыборки (Pooling)

Слои 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 легко настраивать параметры слоев, экспериментировать с глубиной сети и функциями активации, что делает библиотеку гибкой и мощной для визуальных задач.