第一步:准备数据
五种花卉数据:“雏菊”、“蒲公英”、“玫瑰”、“向日葵”、“郁金香”,总共有2671张图片
将数据以A_B.jpg的格式进行标定,A为花朵名字,B为相应花类别的第几张
第二步:搭建模型
本文选择LeNet/AlexNet/Vgg16常用分类网络作为对比:
由于是五分类问题,直接套用网络肯定是不行,因此会在全连接部分做手脚,参考代码如下:
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(256)(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = Dense(64)(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = Dense(5)(x)
predictions = Activation('softmax')(x)
第三步:训练代码
1)损失函数为:交叉熵损失函数
2)LeNet和AlexNet从头训练都比较好收敛,但vgg16网络从头训练很难收敛,因此我们阔以对vgg16网络进行迁移训练微调:
w = 1
if w:
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(width, height, 3))
else:
base_model = VGG16(weights=None, include_top=False, input_shape=(width, height, 3))
for layer in base_model.layers:
layer.trainable = False
第四步:统计正确率
名称 | 训练正确率 | 验证正确率 |
LeNet | 75.5% | 82% |
AlexNet | 86% | 86.3% |
vgg16 | 99.3% | 89.1% |
毫无疑问,vgg16胜利
第五步:搭建GUI界面
第六步:整个工程的内容
有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”
代码的下载路径(新窗口打开链接):基于keras框架的LeNet/AlexNet/Vgg16神经网络花卉分类识别系统
有问题可以私信或者留言,有问必答