感谢您查看我的问题。我正在尝试基于一些预先训练的模型进行图像分类,图像应分为40类。我想使用VGG和Xception预训练模型将每个图像转换为两个1000维向量,并将它们堆叠成1 * 2000维度向量作为我的网络输入,并且网络具有40维输出。网络有2个隐藏层,一个有1024个神经元,另一个有512个神经元。
结构: 图像 - > vgg(1 * 1000尺寸),xception(1 * 1000尺寸) - >(1 * 2000尺寸)作为输入 - > 1024个神经元 - > 512个神经元 - > 40维输出 - > SOFTMAX
然而,使用这种结构我只能达到约30%的准确度。所以我的问题是,如何优化网络结构以获得更高的准确度?我不熟悉深度学习所以我不确定我目前的设计是“正确的”。我真的很期待你的建议
答案 0 :(得分:3)
我不完全确定我了解您的网络架构,但有些内容并不适合我。
有两种主要的转学习方案:
ConvNet作为固定功能提取器。采用预训练网络(VGG和Xception中的任何一个都可以,不需要两者),删除最后一个完全连接的层(此层的输出是针对ImageNet等不同任务的1000级分数),然后处理其余的ConvNet作为新数据集的固定特征提取器。例如,在AlexNet中,这将为包含紧接在分类器之前的隐藏层的激活的每个图像计算4096-D向量。为所有图像提取4096-D代码后,为新数据集训练线性分类器(例如线性SVM或Softmax分类器)。
提示#1:只接受一个预训练网络。
提示#2:您的分类器不需要多个隐藏层。
微调ConvNet 。第二种策略是不仅在新数据集上替换和重新训练ConvNet之上的分类器,而且还通过继续反向传播来微调预训练网络的权重。可以微调ConvNet的所有层,或者可以保留一些早期层(由于过度拟合问题)并且仅微调网络的某些更高级别部分。这是因为观察到ConvNet的早期特征包含更多通用特征(例如边缘检测器或颜色斑点检测器),这些特征应该对许多任务有用,但后来的ConvNet层逐渐变得更加特定于类的细节。包含在原始数据集中。
提示#3:保持早期预训练层固定。
提示#4:使用较小的学习率进行微调,因为您不想太快和太多地扭曲其他预训练层。
这种架构更像我所看到的解决同样问题的架构,并且有更高的机会达到高精度。
答案 1 :(得分:1)
当模型不合适时,您可以尝试几个步骤: