这篇文章主要为大家详细介绍了tensorflow+k-means聚类简单猫狗图像分类的实现方法,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随四海网的雯雯来看看吧!
本文使用的是 kaggle 猫狗大战的数据集:https://www.kaggle.com/c/dogs-vs-cats/data
训练集中有 25000 张图像,测试集中有 12500 张图像。作为简单示例,我们用不了那么多图像,随便抽取一小部分猫狗图像到一个文件夹里即可。
通过使用更大、更复杂的模型,可以获得更高的准确率,预训练模型是一个很好的选择,我们可以直接使用预训练模型来完成分类任务,因为预训练模型通常已经在大型的数据集上进行过训练,通常用于完成大型的图像分类任务。
tf.keras.applications中有一些预定义好的经典卷积神经网络结构(Application应用),如下所示:
我们可以直接调用这些经典的卷积神经网络结构(甚至载入预训练的参数),而无需手动来构建网络结构。
例如,本文将要用到的模型是由谷歌开发的 MobileNetV2 网络结构,该模型已经在 ImageNet 数据集上进行过预训练,共含有 1.4M 张图像,而且学习了常见的 1000 种物体的基本特征,因此,该模型具有强大的特征提取能力。
代码如下:
model = tf.keras.applications.MobileNetV2()
tensorflow+k-means聚类简单实现猫狗图像分类的方法
当执行以上代码时,TensorFlow会自动从网络上下载 MobileNetV2 网络结构,运行代码后需要等待一会会儿~~。MobileNetV2模型的速度很快,而且耗费资源也不是很多。
k-means聚类算法以 k 为参数,把 n 个对象分成 k 个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
k-means的算法原理比较非常简洁、易于理解,但是这里面有个问题需要解决:
如何确定 k 值?
要确定 K 值确实是一项比较费时费力的事情,但是也是 K-Means 聚类算法中必须要做好的工作。
现在进入正题,实现我们的猫狗图像分类。
导入需要的依赖库
代码如下:
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import cv2 as cv
import os, shutil
from pathlib import Path
tensorflow+k-means聚类简单实现猫狗图像分类的方法
获取 animals 文件夹下所有 jpg 猫狗图像
代码如下:
# 获得该文件夹下所有jpg图片路径
p = Path(r"C:\Users\Administrator\DeepLearning\animals")
files = list(p.glob("**/*.jpg"))
tensorflow+k-means聚类简单实现猫狗图像分类的方法
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)
tensorflow+k-means聚类简单实现猫狗图像分类的方法
加载预训练模型 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)
tensorflow+k-means聚类简单实现猫狗图像分类的方法
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
tensorflow+k-means聚类简单实现猫狗图像分类的方法
将分类后的图像保存到不同文件夹下
代码如下:
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")
到此这篇关于tensorflow+k-means聚类 简单实现猫狗图像分类的文章就介绍到这了,更多相关tensorflow实现猫狗图像分类内容请搜索四海网以前的文章或继续浏览下面的相关文章希望大家以后多多支持四海网!
本文来自:http://www.q1010.com/181/19074-0.html
注:关于tensorflow+k-means聚类简单猫狗图像分类的实现方法的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。
关键词:python
四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。