tensorflow - 为什么我们在 keras 中使用 InceptionResnetV2 等预训练模型时包含_top=False?
问题描述
使用预训练的 Imagenet 模型进行图像分类。我无法理解参数中的 include_top = False。我知道它最后会删除完全连接的层。另外我想知道如何决定将哪个预训练模型用于哪种图像分类任务?
解决方案
您的问题与迁移学习有关。一般来说,用于图像分类的 CNN 模型可以分为 2 个部分:
- 第一部分是特征提取器,这部分的工作是直观地找到图像中的特征(或将图像编码到特征的较低空间),这部分的输出应该告诉你是否有尾巴、眼睛、脸等。 . 在图像中。
- 第二部分是分类器,这部分的工作是获取编码后的图像(特征提取器的输出)并将图像分类到所需的类别,例如,如果它看到尾巴、猫眼和猫脸,它就可以分辨出来一只猫。
当您进行迁移学习时,您希望使用经过训练的特征提取器,因为它的工作是找到大部分时间将用于您的分类任务的特征(这句话带有一个很大的假设,即您的任务的输入有点类似于训练特征提取器的输入)。当你进行迁移学习时,你需要重新训练分类器,因为现在它应该对不同的类进行分类,并且只对你的数据训练分类器。
在 CNN 模型中,特征提取器大部分时间是卷积层,全连接层是分类器,无论如何在 ImageNet 模型上都是这种情况。这就是他们在进行迁移学习并重新训练它们时移除完全连接层的原因。
对于第二个问题,大多数时候您应该采用最佳可用模型(取决于您的性能/内存限制),因为它可能具有最强的特征提取器。
更多关于迁移学习(谷歌搜索): ftp: //ftp.cs.wisc.edu/machine-learning/shavlik-group/torrey.handbook09.pdf
推荐阅读
- vb.net - 在所述循环内更改循环的结束整数
- python - 调用 Endpoint.utilAddPendingJob(job) 时遇到问题
- java - 使用 faker.js 添加更多数据会生成 liquibase 错误
- python - 如何从 .txt 大文件中的数据框中获取 csv 文件
- visual-studio - Visual Studio 2019 中的慢速自动完成
- vue.js - How to populate form from store state data returned from vuex with getters?
- tomcat - Tomcat 部署脚本返回 405
- r - 如何在 R 循环中不将 POSIXct 转换为数字
- git - 为什么“git diff”将文件与 /dev/null 进行比较?
- python - 如何使用带有烧瓶的for循环显示json数据