Python 在inception V3模型上添加卷积层

Python 在inception V3模型上添加卷积层,python,tensorflow,machine-learning,keras,multilabel-classification,Python,Tensorflow,Machine Learning,Keras,Multilabel Classification,我需要使用Keras的inception V3模型来训练一个图像分类器。在进入预训练的inception V3模型之前,图像经过5个Conv2D层和2个MaxPool2D层。然而,我的代码给了我一个ValueError的错误:输入深度(64)不是输入形状为[?,2,2224],[3,3,3,32]的“inception_v3_4/conv2d_123/卷积”(op:'conv2d')的滤波器(3)输入深度的倍数。 我认为我以前层的输出形状与Inception要求的输入形状不兼容。但我无法解决这个

我需要使用Keras的inception V3模型来训练一个图像分类器。在进入预训练的inception V3模型之前,图像经过5个Conv2D层和2个MaxPool2D层。然而,我的代码给了我一个
ValueError的错误:输入深度(64)不是输入形状为[?,2,2224],[3,3,3,32]的“inception_v3_4/conv2d_123/卷积”(op:'conv2d')的滤波器(3)输入深度的倍数。

我认为我以前层的输出形状与Inception要求的输入形状不兼容。但我无法解决这个问题,或者甚至无法解决这个错误。我是一个机器学习的初学者,对此我将不胜感激

我的代码如下:

inception_model = inception_v3.InceptionV3(weights='imagenet', include_top = False)

for layer in inception_model.layers:
    layer.trainable = False

input_layer = Input(shape=(224,224,3)) #Image resolution is 224x224 pixels
x = Conv2D(128, (7, 7), padding='same', activation='relu', strides=(2, 2))(input_layer)
x = Conv2D(128, (7, 7), padding='same', activation='relu', strides=(2, 2))(x)
x = Conv2D(64, (7, 7), padding='same', activation='relu', strides=(2, 2))(x)
x = MaxPool2D((3, 3), padding='same',strides=(2, 2))(x)
x = Conv2D(64, (7, 7), padding='same', activation='relu', strides=(2, 2))(x)
x = Conv2D(64, (7, 7), padding='same', activation='relu', strides=(2, 2))(x)
x = MaxPool2D((4, 4), padding='same', strides=(2, 2))(x)

x = inception_model (x) #Error in this line
x = GlobalAveragePooling2D()(x)

predictions = Dense(11, activation='softmax')(x) #I have 11 classes of image to classify

model = Model(inputs = input_layer, outputs=predictions)

model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['acc'])
model.summary()

就像@CAFEBABE所说的那样,这样做几乎是无用的,因为功能映射可以有几乎3个值,但是如果您仍然想尝试,那么您可以这样做:

x = Conv2D(3, (7, 7), padding='same', activation='relu', strides=(2, 2))(input_layer)
您必须记住的另一件事是,就像您在上面使用了5个Conv2D和2个MaxPooling层一样,但您不能这样做,因为即使在Inception模型中,也有Conv2D和max pooling层,它们会将维度设置为负值并给出错误。我尝试使用2个Conv2D层,但出现了一个错误,因此最多可以使用1个

另外,在指定InceptionV3模型时,请指定输入形状

input_layer = Input(shape=(224,224,3)) #Image resolution is 224x224 pixels
x = Conv2D(128, (7, 7), padding='same', activation='relu', strides=(2, 2))(input_layer)

inception_model = tf.keras.applications.InceptionV3(weights='imagenet', include_top = False, input_shape=x.shape[0])
for layer in inception_model.layers:
    layer.trainable = False

x = inception_model (x)
x = GlobalAveragePooling2D()(x)

predictions = Dense(11, activation='softmax')(x) #I have 11 classes of image to classify

model = Model(inputs = input_layer, outputs=predictions)
model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['acc'])
model.summary()

这会起作用,但我怀疑这对模型是否有帮助。不管怎样,谁知道会发生什么,就试试看。

前几层的用途是什么?它们基本上会将您的输入缩放到维度`(无、2、2、64)`添加至少一个要素地图最多应有3个值。然而,即使在这种情况下,输入也几乎是无用的。因此,这些措施的目的是什么layers@CAFEBABE我试图实现本文所示的体系结构。我做错了吗?