基于TensorFlow的花卉识别

2023-11-12

概要设计

数据分析

本次设计的主题是花卉识别,数据为TensorFlow的官方数据集flower_photos,包括5种花卉(雏菊、蒲公英、玫瑰、向日葵和郁金香)的图片,并有对应类别的标识(daisy、dandelion、roses、sunflowers、tulips)

数据集内容举例:
在这里插入图片描述
数据集tgz文件解压后,内部划分为5个相对应的文件夹,文件夹内为相对应图片:
在这里插入图片描述
在这里插入图片描述
对应样本数(对数据集进行分类,90%训练集,10%验证集):
在这里插入图片描述

设计任务

本次设计的任务是通过所提供的数据集数据(具有对应花卉分类),使用神经网络模型方法进行训练,使用该模型对其它同类花卉进行类型识别,需要借助TensorFlow环境下的神经网络模型进行处理训练。
本次设计任务我将使用TensorFlow环境下的卷积神经网络CNN技术,通过CNN对数据集进行对应的训练,建立相关模型,再使用模型对相对应花卉进行识别。其中神经网络的建立使用TensorFlow 2.x的Keras的Api进行搭建,绘制损失函数和准确率曲线对模型训练效果进行评价,训练完成保存为mode.h5文件储存,在预测数据时读取model文件加载model,再使用model进行预测数据,并使用Pyqt5工具设计一个简洁的GUI界面进行人机交互,能够自定义预测数据集图片。

本次设计使用TensorFlow 2.3,Python 3.8 环境,IDE使用PyCharm,进行神经网络的搭建和训练。

详细设计

数据加载和预处理

1、设置图片尺寸为180*180,分批大小32
在这里插入图片描述

2、从flower_photos文件夹中加载数据:
(train_ds为训练集,val_ds为验证集)
使用tf.keras.preprocessing.image_dataset_from_directory方法,其中参数:
Directory:数据集储存文件夹路径
Validate_split:划分训练集和验证集比例,输入0.1为验证集占10%
Subset:training为训练集,validation为验证集
Seed:用于shuffle和转换的可选随机种子,选择123
Image_size:图片大小,为上一点所预设180*180
Batch_size:数据批次的大小,为预设的32
在这里插入图片描述
3、获取分类名:
在这里插入图片描述
结果:
在这里插入图片描述

4、数据可视化演示:
在这里插入图片描述
5、配置数据集:
• 使用shuffle()函数打乱数据,使用cache()函数将数据集缓存到内存当中,
再使用prefetch()函数预取数据,加速运行
在这里插入图片描述

神经网络构建

第1层:输入层:将数据归一化,并设置input_shape输入
在这里插入图片描述
第2层:卷积层1:卷积核数目为16,卷积核为3*3,激活函数为relu,并设置input_shape为(180,180,3),使用卷积的目的是从输入图片中提取特征
在这里插入图片描述

第3层:池化层1:采用最大池化操作,使用2*2采样,池化层的目的是降低了每个特征映射的维度,但是保留最重要的信息
在这里插入图片描述

第4层:卷积层2:卷积核数目为32,卷积核为3*3,激活函数为relu
在这里插入图片描述

第5层:池化层2:采用最大池化操作,使用2*2采样
在这里插入图片描述

第6层:卷积层3:卷积核数目为64,卷积核为3*3,激活函数为relu
在这里插入图片描述

第7-10层:两个卷积层和池化层
在这里插入图片描述

第11层:Flatten层:连接卷积层与全连接层,把多维的输入一维化
在这里插入图片描述

第12层:全连接层:units设置为128,即输出维度为128,,激活函数为relu,全连接层对上一层的神经元进行全部连接,实现特征的非线性组合,进行特征进一步提取
在这里插入图片描述

第13层:输出层:输出预期结果
在这里插入图片描述
在这里插入图片描述

使用Sequential逐层描述每层网络, 搭建神经网络结构:
在这里插入图片描述
打印网络结构:
在这里插入图片描述

模型训练

1、模型编译:
优化器optimizer选adam,损失函数loss选SparseCategoricalCrossentropy,指标metrics选择准确率accuracy
在这里插入图片描述
2、训练模型
指定训练集train_ds,验证集validation_data为val_ds,迭代10次
在这里插入图片描述
3、训练结束,保存model为model.h5
在这里插入图片描述
4、使用evaluate评价模型,并打印准确率
在这里插入图片描述
5、获取准确率和损失值并绘制函数
在这里插入图片描述
6、绘制混淆矩阵:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型预测

1、定义常量:
在这里插入图片描述
Flower_dict为花卉种类序列,以及图片宽高

2、加载模型
在这里插入图片描述
3、根据方法参数path加载图片数据转为array类型,由于维度问题需要扩展1维,使用numpy的expand_dims方法将数据由3维扩展为4维,然后使用model.predict方法将图片数据作为参数调用,返回result结果(index)对应flower_dict相对应index,返回对应index的种类名作为结果
在这里插入图片描述

GUI界面

1、使用Pyqt5工具设计GUI界面:
在这里插入图片描述
2、使用Pyqt5生成ui代码:
部分:
在这里插入图片描述

3、编写主函数Main.py
①import 组件
在这里插入图片描述

②打开GUI界面,初始化
在这里插入图片描述
在这里插入图片描述

③定义训练和预测函数:
在这里插入图片描述

注意事项

单独选择图片进行预测时,由于图片数据维度问题需要扩展1维,使用numpy的expand_dims方法将数据由3维扩展为4维,然后使用model.predict方法将图片数据作为参数调用

优化策略

优化CNN网络处理,防止过拟合,提高模型的泛化能力

运行结果

初始页面选训练:
在这里插入图片描述
1、网络结构
在这里插入图片描述
在这里插入图片描述

2、迭代过程
在这里插入图片描述

3、数据可视化
在这里插入图片描述

4、准确率
在这里插入图片描述

5、损失函数
在这里插入图片描述

6、混淆矩阵:
在这里插入图片描述

7、GUI演示
点击识别
在这里插入图片描述

选择图片
在这里插入图片描述
识别成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Gitee源码: https://gitee.com/steven_L1047/tensor-flow.git.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于TensorFlow的花卉识别 的相关文章

随机推荐

  • 运行时链接

    基本概念 运行时链接 是在程序运行时 而非编译时或加载时 将程序代码与其依赖的库代码进行链接的过程 动态链接在程序启动时或实际运行过程中通过API函数完成 这种方式的主要优点是它允许程序在运行时加载和卸载不同的库模块 从而实现更高的模块化和
  • 敏捷开发“松结对编程”实践之三:共同估算篇(大型研发团队,学习型团队,139团队,师徒制度,敏捷设计,估算扑克,扑克牌估算)

    转载自 http blog csdn net cheny com article details 6587277 本文是 松结对编程 系列的第三篇 之一 之二 之三 之四 之五 之六 之七 之八 此系列之九及之后文章请见栏目总目录 估算是经
  • 使用FFMPEG将WebM转为MP4或MKV

    PS5 自带的录像功能导出的格式是WebM 同时视频是HDR默认60帧 我们有时需要转成其他格式保存 下面两个命令可以将其转成mkv或者mp4格式 ffmpeg i test webm vf zscale t linear npl 100
  • C++基础之const

    C 中什么是常量 常量 在程序运行期间不能发生改变的变量 常量不限制类型 但是在定义之后值不可修改 c 中定义常量有两种方法 使用宏定义 define预处理器 来自C语言 define DEF WINDOW WIDTH 720 使用cons
  • java简单毕设_[手把手教你做毕设](专栏介绍)

    引子 我并没有写过毕设相关的博文 但是每周都有不少人咨询我毕设相关的系统开发问题 OK 好像很久很久以前 写过一个 JSP Servlet培训班作业管理系统 说实话写得一般 确实一般 不是谦虚 以致于心有愧欠 感觉貌似大概可能也许差不多 误
  • 55个mes项目解决方案及案例_我调查了 20 个 MES 项目实施情况,发现了这些

    本文首发于 智能制造社区 作者Raylan 昨天智能制造社区的 Raylan 同学设计了个简单的问卷 想分析下 MES 项目的执行情况 所以就在我们社区微信群里简单做了抽样 此次调研是匿名调研 问卷接收数量大约在44 63之间 问卷返回数量
  • 从0开始写Vue项目-Vue实现用户数据批量上传和数据导出

    从0开始写Vue项目 环境和项目搭建 慕言要努力的博客 CSDN博客 从0开始写Vue项目 Vue2集成Element ui和后台主体框架搭建 慕言要努力的博客 CSDN博客 从0开始写Vue项目 Vue页面主体布局和登录 注册页面 慕言要
  • IDEA常用快捷键(Windows)

    Ctrl S 保存文件 Ctrl C 复制 Ctrl X 剪切 Ctrl V 粘贴 Ctrl Z 撤销 Ctrl Y 重做 Ctrl F 查找 Ctrl Shift F 全局查找 Ctrl R 替换 Ctrl D 复制当前行或选中区域到下一
  • 编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number是奇数,collatz()就打印

    要求 编写一个名为collatz 的函数 它有一个名为number的参数 如果参数是偶数 那么collatz 就打印出number 2 并返回该值 如果number是奇数 collatz 就打印并返回3 number 1 使用软件 vsco
  • 深度学习 情感分析_使用深度学习进行情感分析

    深度学习 情感分析 介绍 Introduction The growth of the internet due to social networks such as Facebook Twitter Linkedin Instagram
  • Mule的学习(一、mule的认知)

    参考 https blog csdn net a victory article details 70216772 https blog csdn net lishehe article details 33394895 https www
  • U盘读写速度优化

    从android设备上向U盘上传文件 时间比较长 优化后 时间大幅度缩短 经过几次测试 8k的缓存可以达到传输速度和容错率的平衡点 超过了太容易出错 低于8k传输速度会下降 byte buffer new byte 1024 8 使用的第三
  • MMEditing如何添加自己的新模型

    如何使用商汤的框架MMEditing添加一个自己的新模型嘞 因为自己平时做超分辨率 所以这里用BasicVSR的改动作为例子 一般需要在MMEditing中添加三个文件 配置 backbones以及restores BasicSR原始的地址
  • LeetCode-312.戳气球、动态规划

    有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 如果你戳破气球 i 就可以获得 nums left nums i nums right 个硬币 这里的 left 和
  • C语言文件包含

    一个C语言程序由若干源程序文件组成 而一个源文件还可以将另一个源文件的全部内容包含进来 即将指定的源文件包含在当前文件中 例如 下有两个源文件file1 c和file2 c file1 c int max int x int y int z
  • 因易用性导致的TongWeb使用误区

    误区一 使用TongWeb企业版本 即按照 TongWeb7企业版用户手册 pdf 手册操作 安装好TongWeb后doc目录下有手册 TongWeb手册的正确观看顺序 1 最先看 TongWeb7快速使用手册 pdf 了解基本的安装 使用
  • 【基于用户的】协同过滤推荐算法(UserCF算法的实现)

    协同过滤算法在推荐算法领域应用十分广泛 主要有基于用户 UserCF 和基于物品 ItemCF 两种不同的类型 基于用户的推荐算法 它是一种发现兴趣相似的用户的算法 假如你正在建设的是一个学习资源共享平台 你的用户群体有着大致稳定的专业与相
  • JAVA烟花原理

    java烟花原理 0 缘由 两天前无聊玩了下蜘蛛纸牌 发现最后胜利时的烟花效果挺漂亮的 琢磨Java能不能弄出来类似的效果 上网搜了一下 整合资料 基本全是抄的 之后自己写了一份 重点讲原理 源码放文末 上一个效果图 1 概述 其实烟花说白
  • Springboot整合Mybatis(注解开发)

    前言 Springboot整合Mybatis实现一个最基本的增删改查功能 整合的方式有两种一种是注解形式的 也就是没有Mapper xml文件 还有一种是XML形式的 我推荐的是使用注解形式 为什么呢 因为更加的简介 减少不必要的错误 1
  • 基于TensorFlow的花卉识别

    概要设计 数据分析 本次设计的主题是花卉识别 数据为TensorFlow的官方数据集flower photos 包括5种花卉 雏菊 蒲公英 玫瑰 向日葵和郁金香 的图片 并有对应类别的标识 daisy dandelion roses sun