测试结果分析_毕业设计之测试实验及结果分析(二)

本文介绍了使用Python爬虫获取的花类图片数据集,通过AlexNet卷积神经网络进行训练和测试,探讨小样本情况下识别率的影响。展示了玫瑰花识别的效果,并提及在华为云ModelArts上的无代码实现。此外,还涵盖了TensorFlow相关知识和数据结构与算法的内容。
摘要由CSDN通过智能技术生成

阅读本文大概需要 8 分钟。

a406eecd1bd8de260770f22a1a49ef2f.png

基于AlexNet完成五种花的训练和识别

花分类数据集获取及项目简介

在本例中,我们将使用通过Python爬虫技术获取的不具备版权的3762张样本图片,包括5个类别:其中daisy(菊花)633张,dandelion(蒲公英)898张,roses(玫瑰)641张,sunflowers(太阳花)699张,tulips(郁金香)799张;

  1. 训练集图片共3306张,同样也是5种类别,其中daisy(菊花)570张,dandelion(蒲公英)809张,roses(玫瑰)577张,sunflowers(太阳花)630张,tulips(郁金香)720张;
  2. 测试集图片共364张,也是5种类别,其中daisy(菊花)53张,dandelion(蒲公英)89张,roses(玫瑰)64张,sunflowers(太阳花)69张,tulips(郁金香)79张;

有了数据集之后,我们将搭建AlexNet卷积神经网络,通过对图片的训练,来完成对要识别图片的判断,要注意的一点,因为此项目中样本集中图片总量较小,所以相比第一个例子,识别率可能会有所下降。

代码及最终效果展示

接下来,我们给出本案例的核心代码,即AlexNet网络模型搭建的核心代码:

from TensorFlow.keras import layers, models, Model, Sequentialdef flower_AlexNet(im_height=224, im_width=224, class_num=1000):
input_image = layers.Input(shape=(im_height, im_width, 3), dtype="float32") # output(None, 224, 224, 3)
x = layers.ZeroPadding2D(((1, 2), (1, 2)))(input_image) # output(None, 227, 227, 3)
x = layers.Conv2D(48, kernel_size=11, strides=4, activation="relu")(x) # output(None, 55, 55, 48)
x = layers.MaxPool2D(pool_size=3, strides=2)(x) # output(None, 27, 27, 48)
x = layers.Conv2D(128, kernel_size=5, padding="same", activation="relu")(x) # output(None, 27, 27, 128)
x = layers.MaxPool2D(pool_size=3, strides=2)(x) # output(None, 13, 13, 128)
x = layers.Conv2D(192, kernel_size=3, padding="same", activation="relu")(x) # output(None, 13, 13, 192)
x = layers.Conv2D(192, kernel_size=3, padding="same", activation="relu")(x) # output(None, 13, 13, 192)
x = layers.Conv2D(128, kernel_size=3, padding="same", activation="relu")(x) # output(None, 13, 13, 128)
x = layers.MaxPool2D(pool_size=3, strides=2)(x) # output(None, 6, 6, 128)
x = layers.Flatten()(x) # output(None, 6*6*128)
x = layers.Dropout(0.2)(x)
x = layers.Dense(2048, activation="relu")(x) # output(None, 2048)
x = layers.Dropout(0.2)(x)
x = layers.Dense(2048, activation="relu")(x) # output(None, 2048)
x = layers.Dense(class_num)(x) # output(None, 5)
predict = layers.Softmax()(x)
model = models.Model(inputs=input_image, outputs=predict)return model
为了更好的观察训练集和测试集损失值、精度的拟合曲线,我们通过如下代码将其绘制出来:
# plot loss and accuracy image
history_dict = history.history
train_loss = history_dict["loss"]
train_accuracy = history_dict["accuracy"]
val_loss = history_dict["val_loss"]
val_accuracy = history_dict["val_accuracy"]

# figure 1
plt.figure()
plt.plot(range(epochs), train_loss, label='train_loss')
plt.plot(range(epochs), val_loss, label='val_loss')
plt.legend()
plt.xlabel('epochs')
plt.ylabel('loss')

# figure 2
plt.figure()
plt.plot(range(epochs), train_accuracy, label='train_accuracy')
plt.plot(range(epochs), val_accuracy, label='val_accuracy')
plt.legend()
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.show()
绘制出的结果如下所示: 35d488884b4b2459ccbd3ff3afddb69c.png 图 1.1 loss曲线 2bc95d455bd0f6793b4edd970ff29b8d.png 图  1.2 accuracy 曲线 272a9f0111bc38dc101781b8fd9875ec.png

图 1.3 玫瑰花识别效果图

写在最后

关于花分类识别的相关代码

需要注意的一点,我的毕设中关于花分类识别的代码是基于TensorFlow 1.x 版本的,代码略显冗长、规范程度也有待提高,因此在花分类识别的案例中只给出核心部分的代码,小伙伴们可以自己补齐其他代码或者私信找我,我私发给你。

关于花分类识别案例的拓展

为了丰富本论文的项目成果,同时也为了体验华为云AI开发平台的魅力,在毕业设计(基于Tensorflow的深度研究与实现)之番外篇中我们借助华为云AI开发平台ModelArts对训练集中的数据进行数据标注模型训练并最终部署测试(注:此部分不用编写任何代码,只需要会鼠标操作即可)。

小伙伴们学会上述的操作了吗,快去实现一下吧!

8bce8c8661a601cf3b57476d57ea75f8.gif

- End -   往期推荐  ? 近期推文
  1. TensorFlow 2.0 概述
  2. 毕业设计之「神经网络与深度学习概述」(二)
  3. 微信拍一拍效果的原理分析及代码实现
  4. Mock.js测试代码及Ajax拦截案例讲解
  5. Python 开发植物大战僵尸游戏
数据结构与算法系列
  1. 数据结构与算法-1 :旋转图像

  2. 数据结构与算法 -2 :罗马数字与整数的相互转换

  3. 数据结构与算法 -3 :复原IP地址

  4. 数据结构与算法 -4、5 :两数相加&&两数之和

毕业设计系列
  1. TensorFlow环境搭建

  2. 毕业设计(基于TensorFlow的深度学习与研究)之文献翻译篇

  3. TensorFlow 2.0 概述

  4. 毕业设计(基于TensorFlow的深度学习与研究)之核心篇CNN-AlexNet详解

  5. 毕业设计(基于Tensorflow的深度研究与实现)之番外篇

  6. 毕业设计(基于TensorFlow的深度学习与研究)之完结篇

  7. 【东拼西凑】毕业设计之论文查重篇

本站文章搜索推荐 1

长按关注

b15fd8d42373b4001c532a9cbd6de8b3.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值