【调参记录】基于CNN对5类花卉植物数据一步步提升分类准确率

背景

学习深度学习的框架,积累调参经验

数据集

5类花卉图像数据,分别是向日葵、郁金香、玫瑰、蒲公英、雏菊,每类花卉在700到1000张左右,图像尺寸大小不统一,常见尺寸是320x240,数据并不干净,有些混杂的图片。
任务是利用CNN方法对其进行分类识别。

模型记录

1.基本CNN模型进行分类
  • 卷积层1:32个卷积核、大小5x5、步数1,激活函数ReLU,最大池化、步数2,输入150x150x3
  • 卷积层2:64个卷积核、大小3x3、步数1,激活函数ReLU,最大池化、步数2
  • 卷积层3:96个卷积核、大小3x3、步数1,激活函数ReLU,最大池化、步数2
  • 卷积层4:96个卷积核、大小3x3、步数1,激活函数ReLU,最大池化、步数2
  • 全连接层1:512个神经元,激活函数ReLU
  • 全连接层2:256个神经元,激活函数ReLU
  • 分类层:5个神经元,激活函数softmax

batch_size=16,epoch=50。
效果如下,并不理想,出现了过拟合,识别率在65%左右,val_loss不减反增,令人畏惧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.数据增强

在上面的基础上,加上了图像增强处理,具体方式是,随机旋转范围10度,随机缩放0.9~1.1范围,水平和竖直偏移为范围0.2。
epoch还是50,效果如下,识别率在77%左右,loss_val下降后反弹,波动较大,训练loss持续下降,似乎可以继续下降:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.模型改进

在上面的基础上,对cnn模型进行改进,添加了权重衰减、Dropout层、批正则化层(BN)

  • 卷积层1:32个卷积核、大小5x5、步数1,激活函数ReLU,最大池化、步数2,输入150x150x3
  • 加入BN层,介于卷积层和池化层之间
  • 卷积层2:64个卷积核、大小3x3、步数1,激活函数ReLU,最大池化、步数2
  • 加入BN层,介于卷积层和池化层之间
  • 卷积层3:96个卷积核、大小3x3、步数1,激活函数ReLU,最大池化、步数2
  • 加入BN层,介于卷积层和池化层之间
  • 卷积层4:96个卷积核、大小3x3、步数1,激活函数ReLU,最大池化、步数2
  • 加入BN层,介于卷积层和池化层之间
  • 全连接层1:512个神经元,激活函数ReLU,加入权重衰减
  • 加入Dropout层,0.3
  • 全连接层2:256个神经元,激活函数ReLU,加入权重衰减
  • 加入Dropout层,0.3
  • 分类层:5个神经元,激活函数softmax

epoch150,效果如下,发现最后的识别率在83%左右。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.自调整学习率

规则是,如果在5个epoch内,val识别率还是不增加,就让lr变为原来的0.1倍

epoch50,batch_size增加,效果如下,loss趋于平坦,识别率在85%左右,说明合适的学习率很重要,但是最后lr变成了1e-10甚至以下,loss平坦,说明lr越小,收敛越没有效果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.增加cnn网络深度

方法是在每个卷积层后面repeat同样数量的2个卷积层。效果就不上传了,只提升了0.5%~1%左右的识别率。

总结

1.卷积核尺寸不能超过图像尺寸,否则训练下来没什么效果
2.过拟合时候,采用合适的数据增强十分有效,而且对于训练效果也很有帮助,数据增强中,水平翻转比竖直翻转更有效,因为没有倒立的花朵,其他方法也可以多尝试下。
3.在预处理阶段,让X_train归一化会具有一定效果
4.在网络改进中,BN层(批正则化,让数据分布均匀)的加入和dropout层(随机失效,避免过拟合)的效果尤为明显
5.深度网络似乎并没有什么很明显的提升,甚至可能会导致梯度问题,但是深度网络的理解能力肯定要比非深度网络要好。
6.学习率的选择非常重要,越大,收敛越快,但达不到最优的点,越小,收敛越慢,可能会导致局部最优。在训练中自适应调整是一种很好的方法。
7.基本cnn:65%,数据增强:77%左右,模型改进83%左右,自适应调整学习率,85%左右,深度cnn网络,没有很明显的提升。

附个图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考链接:
https://www.kaggle.com/alxmamaev/flowers-recognition(数据集来源)
https://zhuanlan.zhihu.com/p/29534841(受启发的文章)

要代码的人比较多,所以公开数据集+代码的百度网盘链接:
链接:https://pan.baidu.com/s/1-0u55gO38V0PckMZ0IyYSA
提取码:wkhi

  • 13
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
### 回答1: 基于卷积神经网络(CNN)对15花卉进行识别是一个典型的图像分类问题。CNN是一种深度学习模型,专门应用于图像识别任务。在这个问题中,我们需要建立一个CNN模型来识别15花卉。 要实现这个识别任务,首先需要一个包含标记好的数据集,其中包括各种花卉的图像样本。这些图像样本将被用于CNN的训练过程。为了更好地训练模型,可以选择在训练集中使用数据增强技术,如旋转、缩放和翻转等方法,来提高模型的鲁棒性和泛化能力。 然后,我们可以构建一个基于CNN的模型架构。CNN通常包括卷积层、池化层和全连接层等组件。通过卷积和池化操作,模型可以从图像中提取特征,并在全连接层中进行分类。可以选择使用常用的CNN架构,如LeNet、AlexNet、VGGNet或ResNet等,也可以根据具体任务进行调整和优化。 在模型建立完成后,需要对其进行训练和验证。训练过程中,通过将训练集输入到CNN模型中,并使用反向传播算法来训练模型的权重和偏置。验证集用于检查模型在未见过图像上的分类性能。为了防止模型过拟合,可以使用正则化技术,如dropout或L2正则化等。 当模型训练完毕,并且在验证集上达到一个满意的准确率之后,就可以使用测试集来评估模型的性能。测试集包含一组未见过的花卉图像,通过将测试集输入到训练好的模型中,并根据输出进行分类,就可以对模型的分类性能进行评估。 综上所述,基于CNN对15花卉进行识别的过程主要包括数据准备、模型构建、训练验证和性能评估等步骤。通过这个过程,我们可以利用深度学习技术实现高效准确地花卉识别任务。 ### 回答2: 卷积神经网络 (Convolutional Neural Network, CNN) 是一种深度学习算法,特别适用于图像识别任务。基于CNN对15花卉进行识别是一个具体的图像分类问题,下文将简要解释如何进行这项任务。 首先,我们需要准备一个包含15花卉的大型数据集作为训练集。每个花卉别应当包含足够数量的图像样本,使得网络能够学习到每个别的特征。可以使用各种源自互联网的公开数据集,如ImageNet或Flower Recognition Dataset等。确保训练集中的图像样本尽可能地涵盖花卉别的多样性。 接下来,我们需要构建一个CNN模型。CNN通常由若干个卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层(Fully Connected Layer)组成。卷积层用于提取图像的局部特征,池化层则用于降低特征图的维度,全连接层则用于输出最终的分类结果。 构建CNN模型时,可以使用经典的架构,如AlexNet、VGGNet或ResNet等。同时,需要根据花卉识别任务的特点,调整网络的层数、过滤器的大小以及池化步幅等超参数,以增强模型对花卉图像的表示能力。 在模型构建完成后,我们需要将数据集分为训练集和测试集,通常可以采用70%的数据作为训练集,30%的数据作为测试集。使用训练集数据来训练CNN模型,并根据测试集数据对模型进行验证和评估。 在训练过程中,使用反向传播算法(Backpropagation)来更新模型的权重和偏置,使得模型能够对花卉图像进行准确的分类。 最后,通过在未见过的花卉图像上使用训练好的CNN模型进行预测,即可对15花卉进行识别。可以将待预测的图像输入CNN模型,并获取模型输出的概率分布,选择概率最高的别作为预测结果。 通过以上步骤,我们可以基于CNN实现对15花卉的识别。这个过程涉及到数据的准备、模型的构建、训练和预测等环节,需要一定的算法和深度学习知识作为基础。但是一旦模型训练好,它可以准确快速地对15花卉进行分类,具有广泛的应用前景。 ### 回答3: 卷积神经网络(CNN)是一种广泛应用于图像识别领域的深度学习算法。基于CNN对15花卉进行识别时,可以采取以下步骤: 首先,准备一个适当规模的数据集,其中包含15种不同型的花卉图像。这些图像应具有多样性和代表性,以便能够有效地训练CNN模型。 接下来,使用Python编程语言和深度学习框架,例如TensorFlow或PyTorch等,构建一个基于CNN的图像分类模型。该模型应包括卷积层、池化层、全连接层和输出层等组件。 然后,将数据集划分为训练集和测试集,通常采用80:20的比例。训练集用于训练CNN模型,测试集用于评估模型的性能。 接着,进行模型的训练。在每个训练迭代中,将随机选择一批训练图像输入到CNN模型中,并通过反向传播算法进行模型参数的更新,以逐步优化模型的性能。 完成训练后,使用测试集评估CNN模型在新数据上的泛化能力。通过计算模型预测结果与实际标签之间的差异,可以得到模型的准确率、精确率、召回率等指标,以评估模型的性能。 最后,使用训练好的CNN模型对新的花卉图像进行识别。将新图像输入到CNN模型,并根据输出层的结果确定图像所属的花卉别。 通过以上步骤,基于CNN对15花卉进行识别的任务可以得到良好的结果。然而,为了获得更好的性能,可能需要进行超参数调整、数据增强等优化措施。同时,还可以结合其他的技术手段,如迁移学习、模型融合等方法,进一步提升识别性能。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小风_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值