首页 > 解决方案 > 为什么我们在 keras 中使用 InceptionResnetV2 等预训练模型时包含_top=False?

问题描述

使用预训练的 Imagenet 模型进行图像分类。我无法理解参数中的 include_top = False。我知道它最后会删除完全连接的层。另外我想知道如何决定将哪个预训练模型用于哪种图像分类任务?

标签: tensorflowkerasdeep-learningconv-neural-network

解决方案


您的问题与迁移学习有关。一般来说,用于图像分类的 CNN 模型可以分为 2 个部分:

  1. 第一部分是特征提取器,这部分的工作是直观地找到图像中的特征(或将图像编码到特征的较低空间),这部分的输出应该告诉你是否有尾巴、眼睛、脸等。 . 在图像中。
  2. 第二部分是分类器,这部分的工作是获取编码后的图像(特征提取器的输出)并将图像分类到所需的类别,例如,如果它看到尾巴、猫眼和猫脸,它就可以分辨出来一只猫。

当您进行迁移学习时,您希望使用经过训练的特征提取器,因为它的工作是找到大部分时间将用于您的分类任务的特征(这句话带有一个很大的假设,即您的任务的输入有点类似于训练特征提取器的输入)。当你进行迁移学习时,你需要重新训练分类器,因为现在它应该对不同的类进行分类,并且只对你的数据训练分类器。

在 CNN 模型中,特征提取器大部分时间是卷积层,全连接层是分类器,无论如何在 ImageNet 模型上都是这种情况。这就是他们在进行迁移学习并重新训练它们时移除完全连接层的原因。

对于第二个问题,大多数时候您应该采用最佳可用模型(取决于您的性能/内存限制),因为它可能具有最强的特征提取器。

更多关于迁移学习(谷歌搜索): ftp: //ftp.cs.wisc.edu/machine-learning/shavlik-group/torrey.handbook09.pdf


推荐阅读