Слой Conv2D является основным строительным блоком сверточных нейронных сетей (CNN) и предназначен для извлечения признаков из двумерных входных данных, таких как изображения. Он выполняет операцию свертки, скользя по входной матрице фильтром (ядром) и формируя карту признаков (feature map).
filters Определяет количество фильтров (ядр) в
слое. Каждый фильтр обучается распознавать определенный паттерн в
данных. Результатом применения filters фильтров является
тензор, у которого число каналов соответствует количеству фильтров.
tf.layers.conv2d({
filters: 32,
kernelSize: 3,
activation: 'relu',
});kernelSize Размер ядра свертки. Может быть задан
как одно число (квадратное ядро, например 3 означает
3x3) или массив [высота, ширина].
strides Шаг перемещения фильтра по входной
матрице. По умолчанию strides равен 1. Массив
[strideHeight, strideWidth] позволяет задавать разные шаги
по вертикали и горизонтали. Увеличение stride уменьшает размер выходной
карты признаков.
tf.layers.conv2d({
filters: 64,
kernelSize: 3,
strides: [2, 2], // уменьшаем размер выходной карты в 2 раза
});padding Определяет стратегию обработки границ изображения:
'valid' — без дополнений. Размер выходной карты
уменьшается на величину ядра минус один: [ H_{out} = H_{in} - k + 1] [
W_{out} = W_{in} - k + 1]
'same' — добавление нулей по краям, чтобы сохранить
размерность входа: [ H_{out} = ] [ W_{out} = ]
Пример:
tf.layers.conv2d({
filters: 32,
kernelSize: 3,
padding: 'same',
});activation Функция активации, применяемая к
выходу слоя. Чаще всего используются relu,
sigmoid, tanh. Встроенная функция позволяет
сразу включать нелинейность в слой.
useBias Логическое значение, определяющее, будет
ли добавлен смещающий коэффициент (bias) к каждому фильтру. По умолчанию
true.
kernelInitializer и biasInitializer
Инициализаторы весов и смещений. Например, 'glorotUniform'
для весов или 'zeros' для смещений.
Для входного тензора размером (H_in, W_in, C_in) и ядра
(kH, kW) размер выходного тензора
(H_out, W_out, C_out) вычисляется так:
[ H_{out} = + 1] [ W_{out} = + 1]
[ H_{out} = ] [ W_{out} = ]
C_out всегда равно количеству фильтров
filters.
Базовый Conv2D слой с квадратным ядром 3x3:
const layer = tf.layers.conv2d({
filters: 16,
kernelSize: 3,
strides: 1,
padding: 'same',
activation: 'relu'
});
Слой с разными шагами по осям и без смещения:
const layer = tf.layers.conv2d({
filters: 32,
kernelSize: [5, 3],
strides: [2, 1],
padding: 'valid',
useBias: false,
activation: 'tanh'
});
Сворачивание изображения с последующим Flatten:
const model = tf.sequential();
model.add(tf.layers.conv2d({
inputShape: [128, 128, 3],
filters: 32,
kernelSize: 3,
padding: 'same',
activation: 'relu'
}));
model.add(tf.layers.flatten());
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
3x3 или 5x5 обычно дают лучший
баланс между точностью и количеством параметров.'same' padding удобен для сохранения исходных размеров,
особенно когда требуется глубокая сеть с множеством слоев.Слой Conv2D в TensorFlow.js предоставляет гибкие возможности для построения эффективных сверточных нейронных сетей с управлением размером выходного тензора через параметры padding и strides, что критически важно для проектирования архитектуры сети.