Python 官方文档:入门教程 => 点击学习
今天就跟大家聊聊有关使用python怎么实现一个图像分类功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语
今天就跟大家聊聊有关使用python怎么实现一个图像分类功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严格;2、Python属于开源的,所有人都可以看到源代码,并且可以被移植在许多平台上使用;3、Python面向对象,能够支持面向过程编程,也支持面向对象编程;4、Python是一种解释性语言,Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序;5、Python功能强大,拥有的模块众多,基本能够实现所有的常见功能。
k-means聚类算法以 k 为参数,把 n 个对象分成 k 个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
随机选择 k 个点作为初始的聚类中心
对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇。
对每个簇,计算所有点的均值作为新的聚类中心。
重复步骤2、3直到聚类中心不再发生改变
k-means的算法原理比较非常简洁、易于理解,但是这里面有个问题需要解决:
如何确定 k 值?
在 k-means 算法实现过程中,首先面临的问题就是如何确定好 K 值。因为在实际应用中,我们也不知道这些数据到底会有多少个类别,或者分为多少个类别会比较好,所以在选择 K 值的时候会比较困难,只能根据经验预设一个数值。
比较常用的一个方法:肘部法。就是去循环尝试 K 值,计算在不同的 K 值情况下,所有数据的损失,即用每一个数据点到中心点的距离之和计算平均距离。可以想到,当 K=1 的时候,这个距离和肯定是最大的;当 K=m 的时候,每个点也是自己的中心点,这个时候全局的距离和是0,平均距离也是0,当然我们不可能设置成K=m。
而在逐渐加大 K 的过程中,会有一个点,使这个平均距离发生急剧的变化,如果把这个距离与 K 的关系画出来,就可以看到一个拐点,也就是我们说的手肘。
要确定 K 值确实是一项比较费时费力的事情,但是也是 K-Means 聚类算法中必须要做好的工作。
现在进入正题,实现我们的猫狗图像分类。
导入需要的依赖库
import numpy as npimport Tensorflow as tfimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeansimport cv2 as cvimport os, shutilfrom pathlib import Path
获取 animals 文件夹下所有 jpg 猫狗图像
# 获得该文件夹下所有jpg图片路径p = Path(r"C:\Users\Administrator\DeepLearning\animals")files = list(p.glob("**/*.jpg"))
OpenCV读取图像,并将图像大小 resize 为(224,224),以匹配模型输入层的大小以进行特征提取。图像数组转换为 float32 类型并reshape,然后做归一化。
# opencv读取图像 并resize为(224,224)images = [cv.resize(cv.imread(str(file)), (224, 224)) for file in files]paths = [file for file in files]# 图像数组转换为float32类型并reshape 然后做归一化images = np.array(np.float32(images).reshape(len(images), -1) / 255)
加载预训练模型 MobileNetV2 来实现图像分类
# 加载预先训练的模型MobileNetV2来实现图像分类model = tf.keras.applications.MobileNetV2(include_top=False,weights="imagenet", input_shape=(224, 224, 3))predictions = model.predict(images.reshape(-1, 224, 224, 3))pred_images = predictions.reshape(images.shape[0], -1)
k-means聚类算法
k = 2 # 2个类别# K-Means聚类kmodel = KMeans(n_clusters=k, n_jobs=-1, random_state=888)kmodel.fit(pred_images)kpredictions = kmodel.predict(pred_images)print(kpredictions) # 预测的类别# 0:dog 1:cat
将分类后的图像保存到不同文件夹下
for i in ["cat", "dog"]: os.mkdir(r"C:\Users\Administrator\DeepLearning\picture_" + str(i))# 复制文件,保留元数据 shutil.copy2('来源文件', '目标地址')for i in range(len(paths)): if kpredictions[i] == 0: shutil.copy2(paths[i], r"C:\Users\Administrator\DeepLearning\picture_dog") else: shutil.copy2(paths[i], r"C:\Users\Administrator\DeepLearning\picture_cat")
看完上述内容,你们对使用Python怎么实现一个图像分类功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。
--结束END--
本文标题: 使用Python怎么实现一个图像分类功能
本文链接: https://www.lsjlt.com/news/275472.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0