Если вы передадите точную входную форму своему самому первому слою или входному слою в вашей сети, вы получите желаемый результат. Например, я использовал входной слой здесь:
input_1 (InputLayer) [(None, 224, 224, 3)] 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928
Ввод передан как (224,224,3). 3 представляет глубину здесь. Обратите внимание, что расчет сверточных параметров отличается от расчета плотных слоев.
Если вы сделаете следующее:
tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3))
Ты увидишь:
conv2d (Conv2D) ---> (None, 148, 148, 16)
Размеры уменьшены до 148x148, в Keras отступы по умолчанию valid
. Также strides
равно 1. Тогда форма вывода будет 148 x 148. (Вы можете найти формулу.)
Итак, что такое значения None?
- Первое значение Нет — это размер пакета. В Keras первое измерение — это размер партии. Вы можете передать их и сделать фиксированными, или вы можете определить их при подгонке модели или прогнозировании.
- В 2D-свертке ожидаемыми входными данными являются (размер_пакета, высота, ширина, каналы), вы также можете использовать такие формы, как (Нет, Нет, Нет, 3), которые означает, что разрешены различные размеры изображений.
Редактировать:
tf.keras.layers.Input(shape = (None, None, 3)),
tf.keras.layers.Conv2D(16, (3,3), activation='relu')
Производит:
conv2d_21 (Conv2D) (None, None, None, 16) 448
Что касается вашего вопроса, как рассчитываются параметры, даже если мы передали высоту и ширину изображения как Нет?
Параметры свертки рассчитываются согласно:
(filter_height * filter_width * input_image_channels + 1) * number_of_filters
Когда мы помещаем их в формулу,
filter_height = 3
filter_width = 3
input_image_channel = 3
number_of_filters = 16
Параметры = (3 x 3 x 3 + 1) * 16 = 28 * 16 = 448
Обратите внимание, нам нужен только номер канала input_image, который равен 3, что означает, что это изображение RGB.
Если вы хотите рассчитать параметры для последующих сверток, вам необходимо учитывать, что количество фильтров из предыдущего слоя становится количеством каналов для канала текущего слоя.
Вот как вы можете получить параметры None, а не batch_size. Keras нужно знать, является ли ваше изображение RGB или нет в этом случае. Или вы не будете указывать размеры при создании модели и можете передать их при подгонке модели к набору данных.
person
Frightera
schedule
29.01.2021