Связь между размером ядра и размером ввода в CNN - PullRequest
0 голосов
/ 31 мая 2018

У меня есть слой Conv1D в кератах с размером ядра 3 и длиной шага 1. У меня возникает следующая ошибка, когда я пытаюсь обработать входной размер 5, но все работает с входным размером 6.

InvalidArgumentError (see above for traceback): Computed output size would be negative:
-1 [input_size: 0, effective_filter_size: 3, stride: 1]

Я думал, что ядро ​​размера 3 требует ввода по крайней мере 3.

РЕДАКТИРОВАТЬ: Вот модель, размер ввода является переменным, у меня проблема с вводом размера5.

model = Sequential()
model.add(Conv1D(
    input_shape=(None, 4),
    filters=64,
    kernel_size=3,
    activation='relu'))
model.add(Conv1D(
    filters=32,
    kernel_size=3,
    activation='relu'))
model.add(Conv1D(
    filters=16,
    kernel_size=2,
    activation='relu'))
model.add(GlobalMaxPooling1D())
model.add(Dense(number_of_classes))
model.add(Softmax(axis=-1))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

1 Ответ

0 голосов
/ 31 мая 2018

Чтобы убедиться, что размер ваших карт выходных объектов такой же, как и у ваших карт входных объектов, вы должны дополнить ввод с помощью «одинакового» заполнения.

model.add(Conv1D(
    input_shape=(None, 4),
    filters=64,
    kernel_size=3,
    activation='relu',
    padding='same'))
...