У меня следующая проблема, я хочу удалить «Мусорную корзину» с выхода одного из слоев в моей модели Keras.
Код без удаления мусорной корзины выглядит следующим образом и работает:
def create_detector_network():
input = Input(shape=(128, 128, 512))
x = Conv2D(128, kernel_size=3, strides=1, name='detect_1', padding='same')(input)
x = BatchNormalization()(x)
x = Conv2D(65, kernel_size=1, strides=1, name='detect_2')(x)
x = BatchNormalization()(x)
x = Activation('softmax')(x)
x = keras.layers.UpSampling2D(size=(8, 8), data_format=None, interpolation='nearest')(x)
x = Conv2D(1, kernel_size=1, strides=1, name='reduce_dim')(x)
return Model(input, x)
Однако, если я добавлю удаление в сеть:
def create_detector_network():
input = Input(shape=(128, 128, 512))
x = Conv2D(128, kernel_size=3, strides=1, name='detect_1', padding='same')(input)
x = BatchNormalization()(x)
x = Conv2D(65, kernel_size=1, strides=1, name='detect_2')(x)
x = BatchNormalization()(x)
x = Activation('softmax')(x)
x = Lambda(lambda x: x[:, :, :-1], output_shape= (128, 128, 64))(x) #x[:, :, :-1] <------
x = keras.layers.UpSampling2D(size=(8, 8), data_format=None, interpolation='nearest')(x)
x = Conv2D(1, kernel_size=1, strides=1, name='reduce_dim')(x)
return Model(input, x)
, я получу следующий вывод model.summary (), где размер после лямбда-слоя снова увеличивается до 65:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_38 (InputLayer) (None, 128, 128, 512) 0
_________________________________________________________________
detect_1 (Conv2D) (None, 128, 128, 128) 589952
_________________________________________________________________
batch_normalization_37 (Batc (None, 128, 128, 128) 512
_________________________________________________________________
detect_2 (Conv2D) (None, 128, 128, 65) 8385
_________________________________________________________________
batch_normalization_38 (Batc (None, 128, 128, 65) 260
_________________________________________________________________
activation_10 (Activation) (None, 128, 128, 65) 0
_________________________________________________________________
lambda_6 (Lambda) (None, 128, 128, 64) 0
_________________________________________________________________
up_sampling2d_18 (UpSampling (None, 1024, 1016, 65) 0
_________________________________________________________________
reduce_dim (Conv2D) (None, 1024, 1016, 1) 66
=================================================================
Кто-нибудь может объяснить, почему это происходит и как это решить?