基于Python机器学习实现的花卉识别

news/2025/2/19 10:58:12/

目录

  1. 问题分析 3
  2. 问题求解 3
    2.1. 数据预处理 3
    2.1.1. 预处理流程 3
    2.1.2. 预处理实现 4
    2.2. 降维可视化 4
    2.2.1. 降维流程分析 4
    2.2.2. PCA 方法降维 4
    从图中给出的结果得到各个阶段的用时 6
    2.2.3. t-SNE 方法求解 7
  3. 随机产生初始解,得到在低维空间中的映射样本𝑌 7
  4. 通过梯度下降和动量法对结果进行更新 7
  5. 算法在达到指定的迭代步数时,停止迭代 7
    2.2.3.3.t-SNE 实现结果 7
    2.2.4. LDA 方法求解 10
    2.2.4.1. LDA 算法原理 10
    2.2.4.2. LDA 实现过程 10
  6. 则降维后的结果为𝑧𝑖 = 𝑊𝑇𝑥𝑖 10
    2.2.4.3. LDA 实现结果 10
    2.2.4.4. LDA 模型性能 12
    从图中给出的结果得到各个阶段的用时 12
    2.2.5. 自编码器方法求解 13
    2.2.5.1 .自编码器算法原理 13
    2.2.5.2 .自编码器实现过程 13
    2.2.5.3 .自编码器实现结果 14
    2.2.5.4 .自编码器模型性能 15
    2.2.6. 不同降维可视化方法比较和分析 16
    2.2.6.1 .不同降维可视化方法比较 16
    2.2.6.2 .不同降维可视化方法分析 16
    2.3. 聚类分析 16
    2.3.1. 聚类流程分析 16
    2.3.2. 聚类评价标准说明 17
    2.3.2.1 .标准化后的互信息 17
    2.3.2.2 .调整后的兰德系数 17
    2.3.2.3.Fowlkes-Mallows 分数 17
    2.3.2.4.准确率 17
    2.3.3. K-Means 方法聚类 17
    2.3.3.1.K-Means 聚类原理 17
    2.3.3.2.K-Means 聚类实现过程 18
  7. 初始划分 K 个聚类,选择中心点 18
    2.3.3.3.K-Means 聚类结果 18
    2.3.3.4.K-Means 聚类性能 18
    2.3.4. K-Means++方法聚类 18
    2.3.4.1.K-Means++聚类原理 18
    2.3.4.2.K-Means++聚类实现过程 18
    2.3.4.3.K-Means++聚类结果 19
    2.3.4.4.K-Means++聚类性能 19
    2.3.5. SOM 方法聚类 19
    2.3.5.1. SOM 聚类原理 19
    2.3.5.2. SOM 聚类实现过程 19
    2.3.5.3. SOM 聚类结果 20
    2.3.5.4. SOM 聚类性能 20
    2.3.6. PCA+K-Means 方法聚类 20
    2.3.7. PCA+K-Means++方法聚类 20
    2.3.8. PCA+SOM 方法聚类 21
    2.3.9. 聚类方法对比和总结 21
    2.4. 深度学习和非深度学习识别分类 22
    2.4.1. 非深度学习识别分类 22
    2.4.1.1 .数据处理 22
  8. PCA 降维原理:在降维中已经做过说明,这里不再阐述 22
    2.4.1.3 .实现过程 22
    2.4.1.4 .实验结果 22
    2.4.1.5 .模型性能 23
    2.4.2. 深度学习识别分类 23
    2.4.2.1 .数据处理 23
    2.4.2.2 .算法原理 23
    2.4.2.3 .实现过程 25
    2.4.2.4 .实验结果与模型性能结果 25
    2.4.2.5 .模型性能分析 26
  9. 总结 26
    1.问题分析
    本次任务以花卉识别为题,借用机器学习方法,完成降维可视化、聚类分析、识别分类等任务。
    降维可视化是在以 PCA、tSNE 等方法,将花卉数据进行降维,得到降维后的二维图像, 这样便可以将其在平面上展示出来。聚类分析是利用合适的聚类方法,对花卉数据进行聚类, 将聚类之后的结果与标签进行对应,讨论不同聚类方法的结果。使用非深度学习和深度学习的方法,对已经标注完成但是可能含有误标数据的花卉样本进行分类,得到最终的花卉识别准确率。
    2.问题求解
    2.1.数据预处理
    2.1.1.预处理流程
    给定的数据集为 jpg 格式的数据,由于读取 jpg 格式的图片比较慢,所以将 jpg 格式存储在 numpy 的多维数组中,将提取出的多维数组存储在磁盘中,并且在下一次读取数据时, 先判断是否存在已经打包好的多维数组文件。如果存在,那么直接读取多维数组的数据;如果不存在,那么读取源文件,并将数据存到多维数组中,再存到磁盘里,供下次使用。
    这次实验中,我分别针对降维可视化、聚类以及图片分类问题做了研究。在读入图片数据方面,我才用了事先将图片存为 numpy 数组的方式加速数据读取;降维可视化中,我采用了 PCA、t-SNE、LDA、自编码器等四种方式进行,本文转载自http://www.biyezuopin.vip/onews.asp?id=16710其中,有监督的降维方法 LDA 的降维后的图片分类效果很好,而其余的非监督方法则相对比较差;在聚类问题中,我采用了 K-
    Means、K-Means++、SOM 的方法进行聚类,之后我又结合了降维方法,对上面的三种聚类方法进行了加速,最终取得了和直接聚类相似的聚类效果、同时大大提升了运算效率;在图像分类问题中,在非深度学习方法中,我使用了 SVM 进行多分类任务,考虑到 SVM 的分类效率,我先对数据进行了降维,由于其中需要调整两个参数,我采用了两重循环遍历的方法对两个参数进行了调整,最后发现当降维数为 256、SVM 分类器的惩罚系数设为 16 时, 取得的分类效果最好,能够达到 55.5%;在深度学习方法中,我采用了 resnet50 进行分类, 在数据处理阶段,加入了 resize 和随机水平翻转的方式对数据进行增强,同时我才用了 SAM 优化器,得到了泛化能力很好的网络结果。
    从这次实验中,我又系统地回顾了模式识别过程课上学习到的各种降维、聚类以及分类方法,有了很大的收获。
from MyData import MyData
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from time import time
# PCA降维
if (__name__=="__main__"):# 是否显示降维结果show_plot = False# 是否显示各个阶段的用时show_plot_Time = True# 记录各个关键时刻的时间keyTime = []keyTime.append(time())data = MyData()pictures,labels=data.getData()vectorPictures=pictures.reshape((-1,3*80*80))keyTime.append(time())# 降到二维model = PCA(n_components=2)model.fit(vectorPictures)keyTime.append(time())result = model.transform(vectorPictures)keyTime.append(time())if(show_plot):x_min = np.min(result[:,0])x_max = np.max(result[:,0])y_min = np.min(result[:,1])y_max = np.max(result[:,1])plt.figure(1)for i in range(8):indexLabel = labels==itmpResult = result[indexLabel]tmpLabel = labels[indexLabel]plt.subplot(2,4,i+1)plt.scatter(tmpResult[:,0],tmpResult[:,1],s=1)plt.axis([x_min-0.1*(x_max-x_min),x_max+0.1*(x_max-x_min),y_min-0.1*(y_max-y_min),y_max+0.1*(y_max-y_min)])plt.title(data.Flowers[i])plt.show()plt.figure(2)legends = []for i in range(8):indexLabel = labels==itmpResult = result[indexLabel]tmpLabel = labels[indexLabel]plt.scatter(tmpResult[:,0],tmpResult[:,1],s=1)plt.legend(data.Flowers)plt.axis([x_min-0.1*(x_max-x_min),x_max+0.1*(x_max-x_min),y_min-0.1*(y_max-y_min),y_max+0.1*(y_max-y_min)])plt.show()keyTime.append(time())model = PCA(n_components=3)model.fit(vectorPictures)keyTime.append(time())result = model.transform(vectorPictures)keyTime.append(time())if(show_plot):x_min = np.min(result[:,0])x_max = np.max(result[:,0])y_min = np.min(result[:,1])y_max = np.max(result[:,1])z_min = np.min(result[:,2])z_max = np.max(result[:,2])f=plt.figure(1)for i in range(8):indexLabel = labels==itmpResult = result[indexLabel]tmpLabel = labels[indexLabel]ax=plt.subplot(2,4,i+1,projection='3d')# ax=Axes3D(f)ax.scatter(tmpResult[:,0],tmpResult[:,1],tmpResult[:,2],s=1)ax.set_zlim3d(z_min-0.1*(z_max-z_min),z_max+0.1*(z_max-z_min))ax.set_xlim3d(x_min-0.1*(x_max-x_min),x_max+0.1*(x_max-x_min))ax.set_ylim3d(y_min-0.1*(y_max-y_min),y_max+0.1*(y_max-y_min))plt.title(data.Flowers[i])plt.show()plt.figure(2)ax=plt.subplot(projection='3d')legends = []for i in range(8):indexLabel = labels==itmpResult = result[indexLabel]tmpLabel = labels[indexLabel]ax.scatter(tmpResult[:,0],tmpResult[:,1],tmpResult[:,2],s=1)plt.legend(data.Flowers)ax.set_zlim3d(z_min-0.1*(z_max-z_min),z_max+0.1*(z_max-z_min))ax.set_xlim3d(x_min-0.1*(x_max-x_min),x_max+0.1*(x_max-x_min))ax.set_ylim3d(y_min-0.1*(y_max-y_min),y_max+0.1*(y_max-y_min))plt.show()print(keyTime)if(show_plot_Time):tmp_KeyTime = np.array(keyTime)# plt.plot(tmp_KeyTime)# plt.show()yticks = np.diff(tmp_KeyTime)plt.plot(yticks)plt.yticks(yticks,yticks)plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/sheziqiong/article/details/126794602
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/438763.html

相关文章

花卉识别(tensorflow)

参考教材:人工智能导论(第4版) 王万良 高等教育出版社 实验环境:Python3.6 Tensor flow 1.12 人工智能导论实验导航 实验一:斑马问题 https://blog.csdn.net/weixin_46291251/article/details/122246347 实验二:图像恢复 http…

python识别花草_吴裕雄 python神经网络 花朵图片识别(9)

import os import numpy as np import matplotlib.pyplot as plt from PIL import Image, ImageChops from skimage import color,data,transform,io #获取所有数据文件夹名称 fileList os.listdir("F:\\data\\flowers") trainDataList [] trianLabel [] testData…

毕业设计-基于卷积神经网络的花卉图片识别

目录 前言 课题背景和意义 实现技术思路 一、LeNet-5 卷积神经网络模型 二、设计思路 三、实验及结果分析 四、总结 实现效果图样例 最后 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大…

matlab读取本地图片,matlab读取图片

matlab 动态读取,【下载】MATLAB R2014a完全自学一本通+MATLAB智能算法30个案例分析,matlab读取动态数据,matlab读取图片 matlab读取图片_计算机软件及应用_IT/计算机_专业资料。global i... Matlab读取图片代码_计算机软件及应用_IT/计算机_专业资料。1.读取某盘... 处理 imMa…

python爬图片_python爬虫(爬取图片)

python爬虫爬图片 爬虫爬校花网校花的图片 第一步 载入爬虫模块#载入爬虫模块 import re #载入爬虫模块 import requests #载入爬虫模块 第二步 获得校花网的地址,获得其网页F12内的所有东西#获得校花网的地址,获得其网页F12内的所有东西 import…

迁移学习CNN图像分类模型 - 花朵图片分类

训练一个好的卷积神经网络模型进行图像分类不仅需要计算资源还需要很长的时间。特别是模型比较复杂和数据量比较大的时候。普通的电脑动不动就需要训练几天的时间。为了能够快速地训练好自己的花朵图片分类器,我们可以使用别人已经训练好的模型参数,在此…

通过 Tensorflow 的基础类,构建卷积神经网络,用于花朵图片的分类

实验目的 通过 Tensorflow 的基础类,构建卷积神经网络,用于花朵图片的分类。 实验环境 import tensorflow as tfprint(tf.__version__)output: 2.3.0 实验步骤 (一) 数据获取和预处理 1.1 数据选择 TensorFlow 官方提供的花朵…

CNN实现花卉图片分类识别

CNN实现花卉图片分 前言 本文为一个利用卷积神经网络实现花卉分类的项目,因此不会过多介绍卷积神经网络的基本知识。此项目建立在了解卷积神经网络进行图像分类的原理上进行的。 项目简介 本项目为一个图像识别项目,基于tensorflow,利用C…