Я пытаюсь разработать модель с использованием формы ввода переменного размера (изображения).Пожалуйста, смотрите код ниже для подробностей,
def create_bbox_network():
image_input = Input(shape=(3, None, None))
conv1 = Conv2D(16, (3, 3), input_shape=(3, None, None), activation='relu', strides=(1, 1), padding='same')(image_input)
batch_norm1 = BatchNormalization()(conv1)
conv2 = Conv2D(16, (3, 3), activation='relu', padding='same')(batch_norm1)
batch_norm2 = BatchNormalization()(conv2)
conv3 = Conv2D(16, (3, 3), activation='relu', padding='same')(batch_norm2)
batch_norm3 = BatchNormalization()(conv3)
conv4 = Conv2D(16, (3, 3), activation='relu', padding='same')(batch_norm3)
max_pooling_c4 = MaxPooling2D(pool_size=(2, 2))(conv4)
batch_norm4 = BatchNormalization()(max_pooling_c4)
conv5 = Conv2D(16, (3, 3), activation='relu', padding='same')(batch_norm4)
max_pooling_c5 = MaxPooling2D(pool_size=(2, 2))(conv5)
batch_norm5 = BatchNormalization()(max_pooling_c5)
dense_layer = GlobalMaxPooling2D()(batch_norm5)
fc_1 = Dense(64, activation='relu')(dense_layer)
fc_2 = Dense(64, activation='relu')(fc_1)
out = Dense(4, activation='sigmoid')(fc_2)
model = Model(inputs=image_input, outputs=out)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
Запуск приведенного выше кода дает мне ошибку,
ValueError: Axis -1 of input tensor should have a defined dimension
but the layer received an input with shape (None, 16, None, None)
Note: For detail where code is failing see line 4. batch_norm1 layer.
Чего мне здесь не хватает?Я понял, что не могу использовать слой Flatten () при использовании переменной формы ввода.Но такой же случай с функцией BatchNormalization ().Если так, почему мы не можем использовать BatchNormalization с переменным размером ввода?И какова альтернатива этой функции, которая может использоваться здесь осмысленно?
Насколько я понимаю, пакетная нормализация рассчитывается путем вычисления среднего значения и sd всех тензоров выходного слоя, а затем просто нормализует выходной сигнал.Я понимаю, что с flatten существует проблема с весами переменного размера, и, следовательно, ее нельзя использовать.Но я не вижу причин, по которым BatchNormalization нельзя использовать на этом слое.