Слой Flatten в Keras.js представляет собой один из ключевых инструментов для преобразования многомерных данных в одномерные массивы. Его основное назначение — подготовка данных к обработке полносвязными слоями (Dense), которые требуют на вход одномерные векторы.
Слой Flatten не изменяет количество элементов в тензоре, а лишь
изменяет его форму. Например, если на вход подается тензор размером
(batch_size, height, width, channels), слой Flatten
преобразует его в
(batch_size, height × width × channels).
Пример:
Если на вход подан тензор размером (32, 28, 28, 3),
после применения Flatten получаем тензор
(32, 28 × 28 × 3) = (32, 2352).
const flattenLayer = new KerasJS.layers.Flatten({});
Flatten используется чаще всего между сверточными слоями и полносвязными. Сверточные слои (Conv2D, MaxPooling2D) сохраняют пространственные характеристики изображения, формируя тензор с тремя или четырьмя измерениями. Перед передачей в Dense необходимо «развернуть» этот тензор, чтобы получить вектор признаков.
Схема применения:
Input (28x28x3) → Conv2D → MaxPooling2D → Flatten → Dense → Output
Пример 1: Простой Flatten после Conv2D
const model = new KerasJS.Model({
layers: [
{ type: 'conv2d', filters: 32, kernel_size: [3, 3], input_shape: [28, 28, 1], activation: 'relu' },
{ type: 'flatten' },
{ type: 'dense', units: 128, activation: 'relu' },
{ type: 'dense', units: 10, activation: 'softmax' }
]
});
Пример 2: Использование Flatten для табличных данных после слоя Reshape
const model = new KerasJS.Model({
layers: [
{ type: 'reshape', target_shape: [10, 10, 3], input_shape: [300] },
{ type: 'flatten' },
{ type: 'dense', units: 50, activation: 'relu' },
{ type: 'dense', units: 1, activation: 'sigmoid' }
]
});
Слой Flatten — базовый инструмент для структурирования данных в нейронных сетях, обеспечивающий плавный переход от многомерных признаков к полносвязным слоям и способствующий корректной обработке входных данных.