Расчет параметров модели Keras CNN

Моя модель cnn, созданная с использованием Keras 1.1.1, имеет два слоя с объединением сверток, за которыми следуют два плотных слоя, и отсев добавляется после второго слоя с сверткой и первого плотного слоя. Коды следующие:

model = Sequential()
#convolution-pooling layers
model.add(Convolution2D(32, 5, 5, input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(64, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
#dense layers
model.add(Flatten()) 
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add((Dense(2)))
model.add(Activation('softmax'))
#optimizer
sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy',
              optimizer = sgd,
              metrics=['accuracy'])
print model.summary()

Сводная модель дает следующую таблицу:

enter image description here

Мне не ясно, как вычисляется число параметров второго слоя свертки (т.е. 51264, обозначенного красным прямоугольником). Я думал, что число будет (5 * 5 + 1) * 64 = 1664, так как ядро свертки имеет размер 5 * 5 и нужно извлечь 64 карты характеристик.

Кроме того, я уже реализовал отсев. Почему таблица параметров не отражает эту точку. Похоже, номер параметра без выпадения задан, хотя выпадение (слой) указано в таблице. Кто-нибудь может помочь мне интерпретировать сводку параметров?

Ответы

Ответ 1

Это довольно простой расчет с базовой концепцией. И, посмотрев на ваш код и резюме модели, это были мои шаги.

Шаг 1: Формула для расчета параметров

total_params =
(filter_height * filter_width * input_image_channels + 1) * number_of_filters

Шаг 2. Вычисление параметров для первого слоя

filter_height = 5,
filter_weight = 5,
input_image_channels = 1
number_of_filters = 32
Хотя вы не предоставили нам каналы imput image, но я понял это из-за вашего значения параметров.

Теперь мы вычислим количество параметров для первого conv-слоя.

total_param = (5 * 5 * 1 + 1) * 32 = 832

Шаг 3: Точно так же мы можем вычислить слой 2-го сорта. Обратите внимание, что количество фильтров из предыдущего слоя становится числом каналов для текущего изображения текущего слоя.

filter_height = 5,
filter_weight = 5,
input_image_channels = 32
number_of_filters = 64

Теперь мы вычислим количество параметров для второго conv-слоя.

total_param = (5 * 5 * 32 + 1) * 64 = 51264

Ответ 2

Что касается второй части вопроса:

Уровень отсечки случайным образом отключает нейроны во время тренировки. Они все еще присутствуют в вашей модели и поэтому не учитываются по количеству параметров в сводке модели.

Ответ 3

Что касается формулы для суммарных параметров, означает ли это, что для каждого входного канала имеется 64 набора изучаемых весов (фильтров), но только 1 общее смещение для всех фильтров?