#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 после первого слоя.
РЕДАКТИРОВАТЬ: Или заполнение должно быть одинаковым! Спасибо.