Несколько слоев Conv1D: отрицательный размер измерения, вызванный вычитанием 8 из 1 для ‘conv1d_2 / convolution / Conv2D

#python #tensorflow #keras #neural-network #conv-neural-network

#python #тензорный поток #keras #нейронная сеть #conv-нейронная сеть

Вопрос:

Я все еще новичок в отношении сверточных сетей. Я пытаюсь реализовать несколько слоев Conv1D в Keras. К сожалению, после самого первого слоя любые последующие слои выдают следующую ошибку:

 tensorflow.python.framework.errors_impl.InvalidArgumentError: Negative dimension size caused by subtracting 8 from 1 for 'conv1d_2/convolution/Conv2D' (op: 'Conv2D') with input shapes: [?,1,1,32], [1,8,32,32].
  

Я думал, что это может иметь какое-то отношение к уменьшению размера из-за шагов, но он по-прежнему не работает после установки strides=1 для обеих строк Conv1D. Вот мой код. Если выполняется цикл for, то выдается ошибка.

 #State branch
x = Conv1D(layerSize,8,strides=1)(inputState)
x = Activation("relu")(x)

for l in range(conv1Layer-1):
    x = Conv1D(layerSize,8,strides=1)(x)
    x = Activation("relu")(x)

x = MaxPooling1D(pool_size=1)(x)
x = Flatten()(x)
x = Model(inputs=inputState, outputs=x)
  

Любая помощь или совет будут высоко оценены. Спасибо!

Ответ №1:

Если вы не хотите, чтобы длина менялась после свертки, рассмотрите возможность указания padding='same' в конструкторе Conv1d .

Для получения дополнительной информации смотрите документы.

Комментарии:

1. О! Я понимаю. Это гораздо полезнее, чем мое решение установить kernel_size равным 1. Большое вам спасибо!

Ответ №2:

Размер ядра должен быть изменен на 1 после первого слоя.

РЕДАКТИРОВАТЬ: Или заполнение должно быть одинаковым! Спасибо.