rag*_*agr 2 deep-learning conv-neural-network keras tensorflow
使用预训练的 Imagenet 模型进行图像分类。我无法理解参数中的 include_top = False。我知道它最后删除了完全连接的层。另外我想知道如何决定将哪个预训练模型用于哪种图像分类任务?
我无法理解 include_top = False 中的
如果你查看代码,就会发现这是一个简单的 if-else 条件:
if include_top:
# Classification block
x = layers.Flatten(name='flatten')(x)
x = layers.Dense(4096, activation='relu', name='fc1')(x)
x = layers.Dense(4096, activation='relu', name='fc2')(x)
x = layers.Dense(classes, activation='softmax', name='predictions')(x)
else:
if pooling == 'avg':
x = layers.GlobalAveragePooling2D()(x)
elif pooling == 'max':
x = layers.GlobalMaxPooling2D()(x)
Run Code Online (Sandbox Code Playgroud)
如果您设置include_top=True,它,则会创建一个分类层(用于微调目的),否则,将通过GlobalAvreagePooling2D().
我想知道如何决定使用哪种预训练模型来执行哪种图像分类任务?
每种模型都有自己的优点和缺点。参数数量、训练时间、推理时间、准确性和其他一些因素是导致研究人员偏爱一种模型而不是另一种模型的因素。不存在在每个任务或数据集上都表现出色的模型[参见没有免费启动定理]。
您的问题与迁移学习有关。一般来说,用于图像分类的 CNN 模型可以分为 2 部分:
当您进行迁移学习时,您希望使用经过训练的特征提取器,因为它的工作是找到大部分时间将用于您的分类任务的特征(这句话带有一个很大的假设,即您的任务的输入有点类似于特征提取器训练的输入)。当您进行迁移学习时,您需要重新训练分类器,因为现在它应该对不同的类进行分类,并且只在您的数据上训练分类器。
在 CNN 模型中,特征提取器大部分时间是卷积层,全连接层是分类器,无论如何,ImageNet 模型就是这种情况。这就是为什么他们在进行迁移学习时移除完全连接层并重新训练它们的原因。
对于您的第二个问题,大多数时候您应该采用最佳可用模型(取决于您的性能/内存限制),因为它可能具有最强的特征提取器。
有关迁移学习的更多信息(只需谷歌一下):ftp : //ftp.cs.wisc.edu/machine-learning/shavlik-group/torrey.handbook09.pdf
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |