如何使用预训练模型优化神经网络进行图像分类

感谢您查看我的问题。我正在尝试基于一些预训练模型进行图像分类,这些图像需要被分类到40个类别中。我想使用VGG和Xception预训练模型将每张图像转换为两个1000维度的向量,并将它们堆叠成一个1*2000维度的向量作为我的网络的输入,网络的输出为40维度。网络有两个隐藏层,一个有1024个神经元,另一个有512个神经元。

结构:图像-> vgg(1*1000维度), xception(1*1000维度)->(1*2000维度)作为输入 -> 1024个神经元 -> 512个神经元 -> 40维度输出 -> softmax

然而,使用这种结构我只能达到大约30%的准确率。所以我的问题是,如何优化我的网络结构以达到更高的准确率?我对深度学习是新手,所以我并不完全确定我当前的设计是否“正确”。我非常期待您的建议


回答:

我不是完全理解您的网络架构,但有些部分看起来不太对劲。

有两种主要的迁移学习场景:

  • 卷积网络作为固定特征提取器。使用预训练网络(VGG和Xception中的任何一个都可以,不需要两个),移除最后一层全连接层(这一层的输出是针对不同任务如ImageNet的1000个类别得分),然后将卷积网络的其余部分作为新数据集的固定特征提取器。例如,在AlexNet中,这将为每张图像计算一个4096-D的向量,包含分类器之前的隐藏层的激活。一旦您提取了所有图像的4096-D代码,为新数据集训练一个线性分类器(例如线性SVM或Softmax分类器)。

    提示#1:只使用一个预训练网络。

    提示#2:不需要为您自己的分类器设置多个隐藏层。

  • 微调卷积网络。第二种策略是不仅在新数据集上替换和重新训练卷积网络顶部的分类器,还通过继续反向传播来微调预训练网络的权重。可以微调卷积网络的所有层,或者可以保持一些早期的层固定(由于过拟合的担忧)并只微调网络的某些更高层次的部分。这是基于观察到的,卷积网络的早期特征包含更多通用特征(例如边缘检测器或颜色斑点检测器),这些特征对许多任务应该是有用的,但卷积网络的晚期层对原始数据集中包含的类的细节变得越来越具体。

    提示#3:保持早期预训练层固定。

    提示#4:使用较小的学习率进行微调,因为您不希望其他预训练层过快过多地扭曲。

这种架构更接近我见过的解决相同问题的架构,并且有更高的几率达到高准确率。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注