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

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

基于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, Sequential
def 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()


绘制出的结果如下所示:


微信图片_20220611004756.png


图 1.1 loss曲线


微信图片_20220611004811.png

1.2 accuracy曲线


微信图片_20220611004816.png

1.3 玫瑰花识别效果图


写在最后


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


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


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


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

相关文章
|
2月前
|
存储 缓存 NoSQL
Redis性能测试实操记录与分析
Redis性能测试实操记录与分析
30 3
|
2月前
|
SQL 监控 中间件
【应急响应】拒绝服务&钓鱼指南&DDOS压力测试&邮件反制分析&应用日志
【应急响应】拒绝服务&钓鱼指南&DDOS压力测试&邮件反制分析&应用日志
|
2月前
|
安全 测试技术
软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)
软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)
47 1
|
3月前
|
监控 测试技术
深入分析软件测试中的风险评估与管理
【5月更文挑战第30天】 在软件开发生命周期中,风险无处不在,特别是在软件测试阶段。本文旨在探讨软件测试过程中如何有效地进行风险评估和管理,以确保软件质量和项目成功。文中将介绍风险评估的基本概念,提出一个结构化的风险识别和评估框架,并详细讨论如何通过定性和定量方法来管理测试风险。此外,文章还将展示一个案例研究,以说明所提策略在实际中的应用效果。
|
3月前
|
JSON 数据管理 测试技术
自动化测试工具Selenium Grid的深度应用分析深入理解操作系统的内存管理
【5月更文挑战第28天】随着互联网技术的飞速发展,软件测试工作日益复杂化,传统的手工测试已无法满足快速迭代的需求。自动化测试工具Selenium Grid因其分布式执行特性而受到广泛关注。本文旨在深入剖析Selenium Grid的工作原理、配置方法及其在复杂测试场景中的应用优势,为测试工程师提供高效测试解决方案的参考。
|
2月前
|
Java
JavaSE——集合框架二(6/6)-(案例)补充知识:集合的嵌套(需求与分析、问题解决、运行测试)
JavaSE——集合框架二(6/6)-(案例)补充知识:集合的嵌套(需求与分析、问题解决、运行测试)
69 0
|
3月前
|
机器学习/深度学习 敏捷开发 人工智能
深入分析自动化测试中的挑战与机遇
【5月更文挑战第31天】 在软件开发的不断进步和迭代中,自动化测试作为提升效率、确保质量的重要手段,其地位愈发凸显。本文将深入探讨实施自动化测试过程中遭遇的技术挑战,如维护成本、复杂场景模拟等,并剖析其中的机遇,包括持续集成的协同优势和最新的AI辅助技术。通过具体案例分析和前沿技术趋势预测,旨在为软件测试工程师提供全面的视角,以应对未来自动化测试的发展需求。
|
3月前
|
监控 jenkins 测试技术
提升软件测试效率与准确性的策略分析
【5月更文挑战第31天】 在软件开发生命周期中,测试工作占据了举足轻重的地位。本文旨在探讨提高软件测试效率和准确性的有效策略。通过对自动化测试工具的选择、测试用例的优化设计、持续集成系统的整合以及性能测试的关键指标分析,本文提出了一系列创新的方法和实践建议。这些策略不仅能够减少人力资源消耗,还能显著提高软件产品的质量和稳定性。
|
3月前
|
机器学习/深度学习 人工智能 测试技术
深入探究软件测试中的自动化边界值分析
【5月更文挑战第29天】随着软件开发的复杂性增加,确保产品质量的需求促使自动化测试成为核心实践。本文专注于自动化边界值分析的应用与效能,探讨其在提高测试效率和有效性方面的关键作用。通过引入先进的自动化工具和技术,文章揭示了如何优化测试用例设计,减少重复劳动,同时保持高水平的错误检测率。本研究不仅展示了自动化边界值分析在不同类型的软件测试场景中的应用,还讨论了实施过程中可能遇到的挑战及其解决方案。
|
3月前
|
测试技术 程序员
深入理解与应用软件测试中的边界值分析法
【5月更文挑战第29天】 在软件测试领域,边界值分析是一种高效的测试设计技术,它依据边缘情况往往更易暴露程序缺陷的假设。本文将深入探讨边界值分析法的原理、实施步骤以及在实际测试中的应用。通过分析边界条件对测试覆盖的影响,我们展示了如何运用边界值分析提高测试用例的有效性,并结合案例说明其在不同类型的软件测试中如何具体实施。

热门文章

最新文章