Keras中的输入尺寸错误

2024-10-03 11:23:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个错误已经发布了好几次,但我没有找到任何符合我的情况,我真的不明白为什么这个错误出现在那个特定的情况。你知道吗

因此,我正在尝试微调VG16网络,如果我只是改变输出层并使一些早期的层可训练,那么训练似乎不起作用,我只想通过删除最后的层并添加新的层来尝试。你知道吗

具体来说,我将顶层移到最后一个卷积层,因此网络看起来如下所示:

Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
=================================================================
Total params: 12,354,880
Trainable params: 0
Non-trainable params: 12,354,880
_________________________________________________________________

然后我添加一个卷积层:

vgg16_model_ft.add(Conv2D(512, (3,3), padding='same', activation='relu'))

这引发了一个众所周知的错误:

ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=2

我真的不明白为什么ndim=2被发现用于那个新的层,它对我来说没有意义,即使这样做

vgg16_model_ft.add(Conv2D(512, (3,3), padding='same', activation='relu', input_shape=vgg16_model_ft.layers[-1].output_shape))

解决不了。但我对凯拉斯还是有点陌生,所以一定有一些微妙的地方我还不明白。 我正在使用keras2.1.5和Tensorflow后端。你知道吗


Tags: nonemodel错误paramspoolftvgg16conv2d
2条回答

谢谢你的回答,我是在切换到函数API时找到的。显然,使用model.layers.pop()弹出层确实会更改model.summary(),但不会更改模型本身(除非您编译我猜,但在添加我想要的所有层之前我没有这样做)。 不管怎样,我可以不用函数API来完成它。你知道吗

现在我有另一个无关的问题,但我不知道我是否应该为它做另一个职位。。。你知道吗

我不知道为什么会出现这个错误,但是您可以尝试函数API

model_input=Input(shape=(224,224,3))
vgg16_model_ft=VGG16(include_top=False)(input)
new_model=Conv2D(512, (3,3), padding='same', activation='relu')(vgg_model_ft)
new_model=Model(input,new_model)

相关问题 更多 >