You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改input_shape为何需设置include_top=False?技术疑问求解

关于Keras预训练模型的几个疑问解答

嘿,我来帮你把这些点捋明白~

首先,你说的完全没错:输入元组确实是从卷积模块传入的,要是想调整输入形状,直接修改卷积模块的输入定义是最合理的方式。比如你提到的Inception ResNet V2,它的input_shape就是个可选的形状元组,用来指定卷积层要接收的输入维度,调整这个参数就能直接改变输入的形状要求。

接下来聊聊为什么要设置include_top=False移除末尾的全连接层,主要有这几个常见场景:

  • 迁移学习适配:预训练模型的顶层全连接层是针对原数据集(比如ImageNet的1000类)训练出来的,和咱们自己任务的分类数大概率不匹配。去掉顶层后,保留前面经过海量数据训练的卷积特征提取模块,再加上自己定制的分类头(比如新的全连接层+softmax),既能复用预训练的优质特征,又能快速适配自己的任务,还能节省大量训练时间。
  • 特征提取需求:如果咱们不是要做分类,而是想提取输入的特征向量用于其他任务(比如图像检索、聚类),那顶层的全连接层反而会把特征压缩成分类概率,失去了特征的通用性。去掉它之后,就能得到卷积层输出的全局特征图或者扁平化后的特征向量,更适合后续的任务处理。
  • 自定义模型结构:要是想在卷积层之后加入一些特殊的层(比如注意力层、自定义池化层),而不是用原模型自带的全连接层结构,那必须先移除顶层,再把自己的模块拼接上去,这样才能灵活调整模型结构。

然后说你提到的no_of_classes(Keras里多数模型用的是classes参数)修改softmax层的情况:这个功能是针对保留顶层全连接层的场景。当include_top=True时,设置classes参数就能直接替换原模型softmax层的输出维度,适配你的分类数。但这只适用于咱们想直接沿用原模型的全连接层结构,只是改分类数的简单场景;如果需要更灵活的自定义,还是得用include_top=False来完全重构顶层。

简单总结一下:include_top=False和修改classes是两种不同的使用策略——前者是彻底替换顶层结构,适配复杂的自定义需求;后者是在原有顶层基础上微调分类数,适合简单的分类任务修改。

内容的提问来源于stack exchange,提问作者user239457

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:56:58