使用预先训练的Imagenet模型进行图像分类。在讨论中,我无法理解include_top = False,我知道它在结束时删除了完全连接的层。另外,我想知道如何确定哪种预先训练过的模型用于哪种图像分类任务?
发布于 2019-01-06 08:30:56
你的问题与转移学习有关。一般来说,用于图像分类的CNN模型可分为两部分:
当您转移学习时,您希望使用经过训练的特征提取器,因为它的工作是查找大部分时间都将在您的分类任务中的特性(这句话附带了一个很大的假设,即您的任务的输入与特征提取器所接受的输入有点类似)。当你进行转移学习时,你需要重新训练分类器,因为现在它应该对不同的类进行分类,只对你的数据进行分类器的训练。
在CNN模型中,特征提取器大多是卷积层,完全连通的是分类器,ImageNet模型也是如此。这就是为什么他们删除完全连接层时,做转移,学习和再培训他们。
对于第二个问题,大多数时候您应该采用最佳可用模型(取决于性能/内存限制),因为它可能具有最强的特性提取器。
更多关于转移学习的信息(只是google it):ftp://ftp.cs.wisc.edu/machine-learning/shavlik-group/torrey.handbook09.pdf
发布于 2019-01-06 08:25:05
我无法理解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)如果您设置了include_top=True,,它将创建一个分类层(用于微调),否则,将通过GlobalAvreagePooling2D()使用前一层的输出(用于特征提取)。
我想知道如何决定哪种预先训练过的模型用于哪种图像分类任务?
每一种模式都有自己的优缺点。参数的数量、训练时间、推理时间、准确性以及其他一些因素都是导致研究人员倾向于一个模型而不是另一个模型的原因。没有一个模型可以在每个任务或数据集见无自由发射[定理]上表现出色。
https://stackoverflow.com/questions/54059391
复制相似问题