我知道这个错误已经发布了好几次,但我没有找到任何符合我的情况,我真的不明白为什么这个错误出现在那个特定的情况。你知道吗
因此,我正在尝试微调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后端。你知道吗
谢谢你的回答,我是在切换到函数API时找到的。显然,使用
model.layers.pop()
弹出层确实会更改model.summary()
,但不会更改模型本身(除非您编译我猜,但在添加我想要的所有层之前我没有这样做)。 不管怎样,我可以不用函数API来完成它。你知道吗现在我有另一个无关的问题,但我不知道我是否应该为它做另一个职位。。。你知道吗
我不知道为什么会出现这个错误,但是您可以尝试函数API
相关问题 更多 >
编程相关推荐