Понимание формы выхода Conv1D

Вопрос или проблема

Я немного запутался в форме выходных данных, которую выдает Conv1D. Рассмотрим код, который я использовал (многое опущено для ясности):

input_shape = x_train_2trans.shape
# (7425, 24, 1)

model.add(Conv1D(filters=4, input_shape=input_shape[1:], kernel_size=(3), activation=LeakyReLU))
model.add(Dropout(0.2))
model.add(Dense(1))

Я пробовал 3 разных размера ядра: 3, 2 и 1, и выходные размеры составили:

(256, 2500, 12, 1), (256, 2500, 18, 1), (256, 2500, 24, 1) соответственно.

Что меня смущает, так это разница в 6 между каждым уменьшением размера ядра. Насколько я понимаю, для размера ядра 3, 12 должно было бы быть 21; тогда как 18 для размера ядра 2 должно быть 22, чтобы соответствовать размеру 24 с указанными размерами ядер.

Заранее спасибо.

Скорее всего, проблема в входных данных.

Вот игрушечный пример.

import numpy as np
from tensorflow.keras import layers

input = np.ones((100,24,1))
input_shape = input.shape

layer = layers.Conv1D(filters=4, input_shape=input_shape[1:], kernel_size=(2))# Ядро=2
out = layer(input)
out.shape

layer = layers.Conv1D(filters=4, input_shape=input_shape[1:], kernel_size=(4))# Ядро=4
out = layer(input)
out.shape

Выход

TensorShape([100, 23, 4])

TensorShape([100, 21, 4])

Последнее измерение связано с количеством фильтров, которое станет признаками для следующего слоя

Ответ или решение

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

Понимание выходной формы Conv1D

При применении свертки с помощью слоя Conv1D, выходная форма вычисляется на основе нескольких параметров: формы входных данных, размера ядра (kernel size) и количества фильтров (filters).

Входные данные

Вы указали, что ваши входные данные имеют форму (7425, 24, 1), где:

  • 7425 — это количество образцов (samples),
  • 24 — длина временного ряда или размерность данных (например, количество признаков),
  • 1 — количество каналов (например, для одномерных данных, таких как временные ряды, это может быть просто один канал).

Размер ядра

Ваша модель использует различные размеры ядра: (3), (2) и (1). Давайте поговорим о том, как эти изменения в размере ядра влияют на выходную форму.

Формула для вычисления выходной формы

Выходная форма Conv1D для входа размерности (batch_size, steps, input_dim) может быть вычислена по следующей формуле:

[
\text{output_length} = \frac{\text{input_length} – \text{kernel_size}}{\text{stride}} + 1
]

При этом по умолчанию stride равен 1.

Таким образом, для вашего случая:

  • Размер ядра = 3:
    [
    \text{output_length} = \frac{24 – 3}{1} + 1 = 22
    ]

  • Размер ядра = 2:
    [
    \text{output_length} = \frac{24 – 2}{1} + 1 = 23
    ]

  • Размер ядра = 1:
    [
    \text{output_length} = \frac{24 – 1}{1} + 1 = 24
    ]

Каждый из этих расчетов показывает, что выходная длина должна уменьшаться в зависимости от размера ядра, что видно из ваших данных.

Причина расхождения в результатах

Вы описали, что получаете разные размеры выходных данных, не соответствующих ожиданиям, например, (256, 2500, 12, 1). Такое несоответствие может происходить из-за нескольких факторов:

  1. Проблемы с данными: Убедитесь, что форма ваших входных данных соответствует ожидаемой. Например, если ваши данные имеют другой размер, чем указано, выход может изменяться.

  2. Условия применения пустого падинга (padding): Возможно, в вашей модели используется параметр padding, например, ‘same’ или ‘valid’, который влияет на выходную форму. Если padding='same', то выходная длина будет равна входной, и будет добавляться достаточно "пустого" пространства, чтобы сохранить форму.

  3. Количество фильтров (features): Количество фильтров может быть причиной, по которой вы видите изменения в третьем измерении выходных данных. Например, при filters=4, выход будет иметь размерность (batch_size, output_length, num_filters).

Заключение

Ваша путаница, вероятно, связана с тем, какие именно параметры (включая размер ядра и падинг) вы применили в разных версиях вашей модели. Сравните вашу реализацию с примерами, которые мы просмотрели выше, и убедитесь, что все размеры и параметры заданы корректно.

Если все параметры установлены правильно и вы все еще видите несоответствия, возможно, стоит проверить обрабатываемые данные и убедиться, что они имеют ту же размерность и форму, что и ожидается.

Оцените материал
Добавить комментарий

Капча загружается...