我正在尝试使用卷积神经网络对酒店图像数据进行分类。。
以下是一些亮点:
-
图像预处理:
- 转换为灰度
- 将所有图像调整为相同的分辨率
- 归一化图像数据
- 寻找主成分分析组件
-
卷积神经网络:
- 输入-32*32
- 卷积-16个滤波器,3*3滤波器大小
- 池化-2*2过滤器大小
- 辍学率为0.5
- 完全连接-256个单元
- 辍学率为0.5
- 输出-8类
-
使用的库:
- Lasagne
- 诺尔恩
但是,我对测试数据的准确率越来越低,只有28%左右。
有什么可能的原因导致如此不准确?有什么改进建议吗?
提前谢谢。
测试数据准确性低有几个可能的原因,因此如果没有更多的信息和大量的实验,就不可能提供具体的答案。话虽如此,有几点值得一提:
- 正如@lejlot在评论中提到的,PCA预处理步骤是可疑的。CNN的基本架构设计为需要最少的预处理,图像的基本结构保持完整至关重要。这是因为细胞神经网络需要能够找到有用的空间局部特征
- 对于从图像数据中检测复杂对象,您可能会从更多的卷积层中受益。考虑到您所描述的简单体系结构,很可能它根本不具备处理分类任务所需的表达能力
- 此外,您提到在卷积层之后应用dropout。总的来说,我所看到的研究表明,丢弃在卷积层上并不是特别有效。我个人建议删除它,看看它是否有任何影响。如果你最终需要在卷积层上进行正则化(根据我的经验,这通常是不必要的,因为共享内核通常已经充当了强大的正则化器),你可以考虑随机池
- 我能给出的最重要的提示之一是建立一个坚实的机制来测量模型的质量,然后进行实验。尝试修改体系结构,然后调整超参数,看看什么能产生最佳结果。特别是,确保监控训练损失与验证损失,以便确定模型何时开始过拟合
2012 Imagenet之后,所有表现良好的卷积神经网络(现有技术)都在增加更多的卷积神经网,他们甚至使用零填充来增加卷积神经网络。
- 增加卷积神经网络的数量
有人说辍学在CNN上没有那么有效,但使用起来也不错,但
- 你应该降低dropout值,你应该尝试它(可能是0.2)
应分析数据。如果它很低,
- 您应该使用数据扩充技术
如果其中一个标签中有更多数据,
- 你陷入了数据不平衡的问题。但你现在不应该考虑
你可以
- 应该考虑VGG Net或其他一些CNN的微调
另外,不要转换为灰度,在图像到阵列的转换之后,应该只划分225。
我认为你从一些教程(MNIST)中学习了CNN,你认为你应该把它变成灰度。