是网络的最终输出层吗?
没有。加载模型时,使用了include_top=False。这意味着我们只需要用于我们的迁移学习问题的特征提取器(不需要与针对不同问题进行训练的顶层分类层一起使用)。我们希望从该问题中提取特征所获得的知识将对我们的问题有用。
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights='imagenet')
实际上,我希望模型能够返回最后一层的输出,其维度将是模型具有的分类类型的数量。例如,如果对 1000 个不同类别的图像进行训练,则为 1000,0,0。
如果我们如下加载模型 (include_top=True),我们可以看到输出现在有 1000 个维度。
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=True,
weights='imagenet')
base_mode.output
<tf.Tensor 'Logits/Identity:0' shape=(None, 1000) dtype=float32>
所以这不是输出层吗?还是这样?
您的示例中的那个不是 - 它被称为瓶颈层。我的例子中上面的那个是。
另外,我所指的代码是否将 GlobalAveragePooling 应用于这个 (4,4,1280) 层?我们为什么要做这个?
这是将我们自己的分类器附加到特征提取器的第一步,它通常具有较少的层,并以我们在问题中的类数结束。训练时,我们将冻结特征提取器(大多数情况下)并仅训练新添加的分类器。微调时,瓶颈层中的一些层将被解冻并重新训练。