嘉楠K510开发板的AI应用(四)——调优训练模型
[复制链接]
在上一篇(https://bbs.eeworld.com.cn/thread-1227686-1-1.html)中,我们尝试对一个三分类的模型使用584张图片进行训练,其结果似乎并不让人满意。轮次之间抖动太大,几乎可以说是没有承接性,分析后初步怀疑查看输入的三类图片中的部分图片尺寸过小,可能不能满足卷积的需要,重新调整图片源,尽可能保持各分类图片总数量不变(<300),修改后的图片集数量如下:
恐龙dinosaur:295(train236+test59)、热狗hotdog:260(train208+test52)、花卉flower:280(train225+test55),使得训练集和测试集的图片数量比值完全相同。
同时在导入图片集时,使用batch_size的值为20,恢复为缺省值32,期望扩大数据的多样性。
再次训练,解决了抖动,但出现了新的问题(过拟合),以ResNet50为例,训练曲线如下:
如之前分析的,loss有明显下降趋势,但val_loss几乎不发生变化,说明这个训练迭代过拟合(over fitting),造成过拟合的原因显然是因为样本数量太少,可训练参数过多。考虑到用于训练的电脑只是一个笔记本,平时还做其它使用,不希望通过增大数据集来加强训练效果,只能考虑优化模型,而之前ResNet50和InceptionV3几乎是最简状态,不是很方便修改,于是考虑在自建模型基础上进行调整,之前的训练参数:
Total params: 11,562,243
Trainable params: 11,562,243
Non-trainable params: 0
基本训练思路是多轮Conv2D卷积,拉平后再经过一次Dense的relu,最后分配到3分类的softmax中。考虑增加最大池化(MaxPooling)层和丢弃(Dropout)层,并将丢弃参数设置为0.2~0.3。再次尝试训练。调整后的参数降低至原训练参数的1/10:
Total params: 1,518,723
Trainable params: 1,518,723
Non-trainable params: 0
经过调优以后,曲线已较为平滑。
且可以看到,随着训练轮次增加,loss和val_loss降低,accuracy和val_accuracy增加。说明模型调整是非常有效的。下一步调整是进一步降低loss和提升accuracy。但就目前曲线来看,生成的模型已经初步具备使用价值。计划下一篇开始测试模型。
另:考虑论坛下载审核机制周期挺长,我直接把用到的代码放在楼下,大家如有兴趣,可以直接修改,当然如果引用,最好加上“来自电子工程世界eeworld,原作者是tobot”之类的话
|