回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我知道这个错误已经发布了好几次,但我没有找到任何符合我的情况,我真的不明白为什么这个错误出现在那个特定的情况。你知道吗</p>
<p>因此,我正在尝试微调VG16网络,如果我只是改变输出层并使一些早期的层可训练,那么训练似乎不起作用,我只想通过删除最后的层并添加新的层来尝试。你知道吗</p>
<p>具体来说,我将顶层移到最后一个卷积层,因此网络看起来如下所示:</p>
<pre><code>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
_________________________________________________________________
</code></pre>
<p>然后我添加一个卷积层:</p>
<pre><code>vgg16_model_ft.add(Conv2D(512, (3,3), padding='same', activation='relu'))
</code></pre>
<p>这引发了一个众所周知的错误:</p>
<pre><code>ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=2
</code></pre>
<p>我真的不明白为什么ndim=2被发现用于那个新的层,它对我来说没有意义,即使这样做</p>
<pre><code>vgg16_model_ft.add(Conv2D(512, (3,3), padding='same', activation='relu', input_shape=vgg16_model_ft.layers[-1].output_shape))
</code></pre>
<p>解决不了。但我对凯拉斯还是有点陌生,所以一定有一些微妙的地方我还不明白。
我正在使用keras2.1.5和Tensorflow后端。你知道吗</p>