【问题标题】:What is the output of ImageNet model in Keras?Keras 中 ImageNet 模型的输出是什么?
【发布时间】:2020-03-20 13:18:08
【问题描述】:

我正在尝试理解迁移学习。

在其中一个教程代码中,使用了ImageNet/MobileNetV2模型。

模型的输出是4,4,1280,如屏幕截图所示。

是网络的最终输出层吗?

实际上,我希望模型能够返回最后一层的输出,其维度将是模型具有的分类类型的数量。例如,如果对 1000 个不同类别的图像进行训练,则为 1000,0,0。

所以这不是输出层吗?还是这样?

另外,我所指的代码,将GlobalAveragePooling 应用于这个(4,4,1280) 层?

我们为什么要这样做?

【问题讨论】:

    标签: keras tensorflow2.0 transfer-learning


    【解决方案1】:

    是网络的最终输出层吗?

    没有。加载模型时,使用了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) 层?我们为什么要做这个?

    这是将我们自己的分类器附加到特征提取器的第一步,它通常具有较少的层,并以我们在问题中的类数结束。训练时,我们将冻结特征提取器(大多数情况下)并仅训练新添加的分类器。微调时,瓶颈层中的一些层将被解冻并重新训练。

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 2018-06-30
      • 2017-06-02
      相关资源
      最近更新 更多