什么叫有或没有包括模型的顶层的VGG16模型的区别?我想知道,为什么在模型摘要未显示的输入参数层时,模型被称为不包括顶层。我用以下两种方式VGG16模型:
from keras.applications import vgg16
model = vgg16.VGG16(weights='imagenet', include_top=False)
print(model.summary)
在该模型中的层的形状并没有显示任何输入即(无,无,无,64),请参见下面的
Layer (type) Output Shape Param
===================================================================
block1_conv1 (Conv2D) (None, None, None, 64) 1792
block1_conv2 (Conv2D) (None, None, None, 64) 36928
block1_pool (MaxPooling2D) (None, None, None, 64) 0
但是,下面的代码返回的输入参数
from keras.applications import vgg16
model = vgg16.VGG16()
print(model.summary)
层的形状,在这种情况下,返回输入参数
Layer (type) Output Shape Param
==================================================================
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0
我试图理解为什么是这样的,请评论
VGG的顶层是被连接到卷积碱的输出完全连接的层。这些含有固定节点数量与预先训练上imagenet权重实例化的选项。当实例化一个VGG模型与顶层包括在内,该体系结构的大小是固定的,因此,该模型将只接受与一个固定的输入的大小(224,224,3)的图像。与其他大小的图像馈送网络将改变在密集分类权重的层的量。
然而,当你离开了顶级分类,你就可以养活不同大小的网络的图像,和卷积堆的输出也会随之改变。通过这种方式,您可以将VGG架构为您选择的大小的图像,并粘贴在它上面你自己密集的连接分类。与致密层相反,在卷积层权重的数目留它们的输出的变化是相同的,唯一的形状。
你会发现这一切时,你需要初始化一个VGG模型,而顶层,但特定的输入形状:
from keras.applications import vgg16
model = vgg16.VGG16(include_top=False, input_shape=(100,100,3))
model.summary()
会产生:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_4 (InputLayer) (None, 100, 100, 3) 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 100, 100, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 100, 100, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 50, 50, 64) 0
_____________________________________________________________
etc.
有趣的是看到了卷积层的输出形状如何变化,你打电话与不同的输入形状的结构。对于上面的例子中,我们可以得到:
block5_conv3 (Conv2D) (None, 6, 6, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 3, 3, 512) 0
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
而如果你会用实例形状(400,400,3)的图像的结构,你会得到这样的输出:
_________________________________________________________________
block5_conv3 (Conv2D) (None, 25, 25, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 12, 12, 512) 0
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
注意权重的数量仍然是如何在两种情况下是相同的。