Мне трудно понять выходные формы и количество параметров слоев в модели Keras CNN.

Возьмем этот игрушечный пример:

model = Sequential()
model.add(Conv1D(7, kernel_size=40, activation="relu", input_shape=(60, 1)))
model.add(Conv1D(10, kernel_size=16, activation="relu"))
model.add(MaxPooling1D(pool_size=3))
model.summary()

Результат:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_17 (Conv1D)           (None, 21, 7)             287       
_________________________________________________________________
conv1d_18 (Conv1D)           (None, 6, 10)             1130      
_________________________________________________________________
max_pooling1d_11 (MaxPooling (None, 2, 10)             0         
=================================================================
Total params: 1,417
Trainable params: 1,417
Non-trainable params: 0
_________________________________________________________________

Для первого слоя Conv1D есть 7 фильтров с размером вывода (60-40 + 1) = 21 каждый. Количество параметров (40 + 1) * 7 = 287, чтобы учесть смещение. Так что я в порядке.

Но в каком измерении будет работать второй слой Conv1D? Я предполагаю, что размер выходного фильтра составляет 21-16 + 1 = 6, но я не понимаю, с помощью какой операции мы можем перейти от 7 до 10 для последнего измерения. Я тоже не понимаю, как подсчитывается количество параметров.

Наконец, я не понимаю выходную форму слоя MaxPooling1D, поскольку я ожидал бы, что выходной размер будет 6 - 3 + 1 = 4, а не 2. Как он вычисляется?

0
Mark531 14 Апр 2020 в 20:47

1 ответ

Лучший ответ

... но я не понимаю, с помощью какой операции мы можем перейти от 7 до 10 для последнего измерения.

С помощью той же операции, что и в первом слое от 1 до 7: фильтры свертки применяются ко всей последней оси (т. Е. Размерности) их ввода и выдают одно число в каждом окне приложения. Во втором сверточном слое есть 10 фильтров, поэтому для каждого окна будет сгенерировано 10 значений, следовательно, размер последней оси будет 10 (те же рассуждения применимы и к первому сверточному слою).

Я тоже не понимаю, как подсчитывается количество параметров.

Есть 10 фильтров. Как я уже упоминал выше, фильтр применяется ко всей последней оси. Таким образом, они должны иметь ширину 7 (то есть размер последней оси их ввода). А размер ядра равен 16. Итак, мы имеем: 10 * (16 * 7) + 10 (1 смещение на фильтр) = 1130.

Наконец, я не понимаю выходную форму слоя MaxPooling1D, поскольку я ожидал бы, что выходной размер будет 6 - 3 + 1 = 4, а не 2. Как он вычисляется?

Уровень stride 1D-pooling по умолчанию равен уровню pool_size. Следовательно, применяя последовательность длиной 6, уровень пула размера 3 будет иметь только 2 окна приложений.

Примечание. Вы также можете найти этот соответствующий ответ полезным о том, как работает 1D-conv.

2
today 14 Апр 2020 в 21:55