Расчет размера вывода слоя Conv в модели CNN

В сверточных нейронных сетях, как узнать вывод определенного сверточного слоя? (Я использую keras для создания модели CNN)

Например, если я использую одномерный сверточный слой, где number_of_filters = 20, kernel_size = 10 и input_shape (500,1)

 cnn.add(Conv1D(20,kernel_size=10,strides=1, padding="same",activation="sigmoid",input_shape=(Dimension_of_input,1)))

и если я использую двумерный сверточный слой, где number_of_filters = 64, kernal_size = (5,100), input_shape = (5,720,1) (высота, ширина, канал)

 Conv2D(64, (5, 100),
       padding="same",
       activation="sigmoid",
       data_format="channels_last",
       input_shape=(5,720,1)

каково количество выходных данных в двух вышеуказанных сверточных слоях? Есть ли какое-либо уравнение, которое можно использовать для определения количества выходов сверточного слоя в сверточной нейронной сети?


person ryh12    schedule 20.04.2017    source источник


Ответы (3)


Да, для этого есть уравнения, вы можете найти их на веб-сайте курса CS231N. Но поскольку это сайт программирования, Keras предоставляет простой способ получить эту информацию программно, используя функцию summary модели.

model = Sequential()
fill model with layers
model.summary()

Это напечатает в терминале / консоли всю информацию о слое, такую ​​как формы ввода, формы вывода и количество параметров для каждого слоя.

person Dr. Snoopy    schedule 20.04.2017

На самом деле функция model.summary() может оказаться не тем, что вам нужно, если вы хотите сделать больше, чем просто посмотреть на модель.

Если вы хотите получить доступ к слоям вашей модели Keras, вы можете сделать это с помощью model.layers, который возвращает все слои (назначение сохраняет их в виде списка). Если вы затем захотите посмотреть на конкретный слой, вы можете просто проиндексировать список:

list_of_layers = model.layers
list_of_layers[5] # gives you the 6th layer

То, с чем вы все еще работаете, - это просто объекты, поэтому вы, вероятно, захотите получить определенные значения. Вам просто нужно указать атрибут, на который вы хотите посмотреть:

list_of_layers[-1].output_shape # returns output_shape of last layer

Возвращает вам кортеж output_shape последнего слоя в модели. Вы даже можете пропустить всю процедуру назначения списка, если вы уже знаете, что хотите посмотреть только output_shape определенного слоя, и просто выполните:

model.layers[-1].output_shape # equivalent to the above method without storing in a list

Это может быть полезно, если вы хотите использовать эти значения при построении модели, чтобы направлять выполнение определенным образом (добавление слоя объединения или выполнение заполнения и т. Д.).

person Alexander Rossa    schedule 16.04.2018

Когда я впервые работаю с TensorFlow cnn, очень сложно иметь дело с размерами. Ниже приведен общий сценарий расчета размеров:

рассмотреть возможность

  1. у нас есть изображение размера (nXn), размер фильтра: (fXf), без отступов, без шагов: после измерения свертки: (n-f + 1, n-f + 1)

  2. размер изображения = (nXn) и размер фильтра = (fXf), и у нас есть заполнение: p, тогда выходные размеры равны = (n + 2P-f + 1, n + 2P-f + 1), если мы используем Padding = 'SAME это означает, что выходное dims = входное dims в этом случае уравнение выглядит так: n + 2P-f + 1 = n, поэтому отсюда p = (f-1) / 2

если мы используем допустимое заполнение, это означает отсутствие заполнения и p = 0

в компьютерном зрении f обычно нечетное, если f четное, это означает, что у нас есть асимметричное заполнение.

  1. случай, когда мы используем stride = s, выходной яркость: (floor (((n + 2P-f) / s) +1), floor (((n + 2P-f) / s) +1))
person ALKESH KUMAR    schedule 01.06.2021