Слой Conv1D для последовательных данных

Слой Conv1D в TensorFlow.js предназначен для обработки одномерных последовательностей, таких как временные ряды, текстовые данные или аудиосигналы. Он выполняет сверточную операцию вдоль единственного измерения входного тензора, выявляя локальные закономерности и признаки, которые могут быть полезны для дальнейшего анализа или классификации.

Основные параметры слоя Conv1D

  1. filters Определяет количество фильтров (ядер свертки), которые будут применяться к входным данным. Каждый фильтр обучается распознавать отдельный признак в последовательности.

  2. kernelSize Размер окна свертки. Задает количество соседних элементов последовательности, которые учитываются одновременно при вычислении одного значения свертки.

  3. strides Шаг свертки, задающий смещение окна при движении по последовательности. Значение по умолчанию — 1. Большие значения уменьшают размер выходного тензора.

  4. padding Определяет стратегию дополнения последовательности. Возможные значения:

    • 'valid' — без дополнения, выходной тензор меньше входного.
    • 'same' — выходной тензор того же размера, что и входной, благодаря добавлению нулей по краям.
  5. activation Функция активации, применяемая к результату свертки. Наиболее часто используются 'relu', 'sigmoid' или 'tanh'.

  6. useBias Булевый параметр, включающий или исключающий смещение для каждого фильтра. По умолчанию включено (true).

Формат входных данных

Слой Conv1D принимает тензор формы:

[batchSize, sequenceLength, inputChannels]
  • batchSize — размер пакета данных.
  • sequenceLength — длина входной последовательности.
  • inputChannels — количество признаков на каждый шаг последовательности.

Пример входного массива для временного ряда с 3 признаками на каждом шаге и длиной последовательности 100:

const input = tf.input({shape: [100, 3]});

Создание слоя Conv1D

const conv1dLayer = tf.layers.conv1d({
  filters: 64,
  kernelSize: 3,
  strides: 1,
  padding: 'same',
  activation: 'relu',
  useBias: true
});

После создания слой можно применить к входному тензору:

const output = conv1dLayer.apply(input);

Влияние параметров на выход

  • Количество фильтров (filters) влияет на глубину выходного тензора. Если вход имеет форму [batchSize, sequenceLength, inputChannels], то выход после Conv1D с filters = 64 и padding = 'same' будет [batchSize, sequenceLength, 64].
  • Размер ядра (kernelSize) определяет масштаб локальных паттернов, которые может уловить фильтр. Большие ядра захватывают более длинные зависимости, но могут терять локальные детали.
  • Шаг свертки (strides) сокращает размер выходного тензора. Например, при stride = 2 длина последовательности уменьшается примерно вдвое.

Соединение нескольких слоев Conv1D

Для извлечения более сложных признаков часто применяют несколько последовательных слоев Conv1D. Первый слой может выявлять базовые локальные закономерности, а последующие слои комбинируют их в более сложные структуры.

const model = tf.sequential();
model.add(tf.layers.conv1d({filters: 32, kernelSize: 3, activation: 'relu', inputShape: [100, 3]}));
model.add(tf.layers.conv1d({filters: 64, kernelSize: 3, activation: 'relu'}));
model.add(tf.layers.globalAveragePooling1d());
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));

Использование GlobalAveragePooling1D позволяет свести выход последовательных сверток к вектору фиксированной длины, удобному для последующего полносвязного слоя.

Регуляризация и оптимизация

  • Dropout можно применять после Conv1D для уменьшения переобучения.
  • BatchNormalization стабилизирует обучение и ускоряет сходимость.
  • Настройка learning rate и optimizer влияет на точность обучения моделей с Conv1D.

Применение слоя Conv1D

  • Анализ временных рядов: прогнозирование финансовых показателей, температуры, сенсорных данных.
  • Обработка текста: извлечение n-грамм или локальных шаблонов из последовательности токенов.
  • Аудиообработка: выделение признаков из спектрограмм или сигналов для классификации речи или музыки.

Рекомендации по использованию

  • Малые kernelSize (3–5) подходят для локальных закономерностей, большие (7–15) — для более глобальных паттернов.
  • Число фильтров обычно увеличивается в глубину сети для захвата более сложных признаков.
  • Всегда учитывать форму входного тензора при построении модели, особенно при последовательных слоях с разным padding и strides.

Слой Conv1D в TensorFlow.js является мощным инструментом для извлечения признаков из одномерных последовательностей. Правильная настройка параметров и сочетание с другими слоями позволяет строить гибкие и точные модели для анализа временных рядов, текста и аудиосигналов.