当前位置: 首页 > 知识库问答 >
问题:

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

袁帅
2023-03-14

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

结构:图像-

然而,使用这种结构,我只能达到大约30%的精度。因此,我的问题是,如何优化网络结构以实现更高的准确性?我对深度学习还不熟悉,所以我不敢肯定我目前的设计是否“正确”。我真的很期待你的建议

共有2个答案

章远航
2023-03-14

当模型不适合时,可以尝试以下几个步骤:

  1. 增加训练时间并降低学习率。它可能停在非常糟糕的局部最优值。
  2. 添加可以为大量类提取特定特征的附加层。
  3. 为每个类创建多个两类深度网络(“是”或“否”输出类)。这将使每个网络对每个类更加专业化,而不是训练一个网络来学习所有40个类。
  4. 增加训练样本。
鞠晋
2023-03-14

我不能完全确定我是否理解您的网络架构,但有些部分在我看来并不正确。

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

>

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

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

微调ConvNet。第二种策略是不仅在新数据集上替换和重新训练ConvNet上的分类器,而且通过继续反向传播来微调预训练网络的权重。可以微调ConvNet的所有层,也可以固定一些早期层(由于过度拟合的问题),只微调网络的一些更高级别部分。这是因为观察到,ConvNet的早期特征包含对许多任务都有用的更通用的特征(如边缘检测器或颜色斑点检测器),但ConvNet的后续层逐渐变得更加特定于原始数据集中包含的类的细节。

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

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

这种架构与我所看到的解决相同问题的架构更为相似,并且有更高的机会达到高精度。

 类似资料:
  • 本文向大家介绍使用Keras预训练模型ResNet50进行图像分类方式,包括了使用Keras预训练模型ResNet50进行图像分类方式的使用技巧和注意事项,需要的朋友参考一下 Keras提供了一些用ImageNet训练过的模型:Xception,VGG16,VGG19,ResNet50,InceptionV3。在使用这些模型的时候,有一个参数include_top表示是否包含模型顶部的全连接层,如

  • 我知道前馈神经网络的基本知识,以及如何使用反向传播算法对其进行训练,但我正在寻找一种算法,以便使用强化学习在线训练神经网络。 例如,我想用人工神经网络解决手推车杆摆动问题。在这种情况下,我不知道应该怎么控制钟摆,我只知道我离理想位置有多近。我需要让安在奖惩的基础上学习。因此,监督学习不是一种选择。 另一种情况类似于蛇游戏,反馈被延迟,并且仅限于进球和反进球,而不是奖励。 我可以为第一种情况想出一些

  • 本文向大家介绍利用TensorFlow训练简单的二分类神经网络模型的方法,包括了利用TensorFlow训练简单的二分类神经网络模型的方法的使用技巧和注意事项,需要的朋友参考一下 利用TensorFlow实现《神经网络与机器学习》一书中4.7模式分类练习 具体问题是将如下图所示双月牙数据集分类。 使用到的工具: python3.5    tensorflow1.2.1   numpy   matp

  • 我计划编写一个国际象棋引擎,它使用深度卷积神经网络来评估国际象棋的位置。我将使用位板来表示棋盘状态,这意味着输入层应该有12*64个神经元用于位置,1个用于玩家移动(0表示黑色,1表示白色)和4个神经元用于铸币权(wks、bks、wqs、bqs)。将有两个隐藏层,每个层有515个神经元,一个输出神经元的值介于-1表示黑色获胜,1表示白色获胜,0表示相等的位置。所有神经元都将使用tanh()激活函数

  • 我使用了卷积神经网络(CNN)来训练地图中的图例。这些图例包括圆形、椭圆形、菱形、十字架和正方形。神经网络(受代码启发https://towardsdatascience.com/from-raw-images-to-real-time-predictions-with-deep-learning-ddbbda1be0e4)对我来说效果很好。输入图像是图例(如输入训练图像)的单独裁剪图片,我想要的

  • 是否有方法按层(而不是端到端)训练卷积神经网络,以了解每一层对最终架构性能的贡献?