主頁(yè) > 知識(shí)庫(kù) > tensorflow+k-means聚類簡(jiǎn)單實(shí)現(xiàn)貓狗圖像分類的方法

tensorflow+k-means聚類簡(jiǎn)單實(shí)現(xiàn)貓狗圖像分類的方法

熱門標(biāo)簽:遼寧400電話辦理多少錢 江蘇房產(chǎn)電銷機(jī)器人廠家 蘇州電銷機(jī)器人十大排行榜 溫州旅游地圖標(biāo)注 幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 電信營(yíng)業(yè)廳400電話申請(qǐng) 悟空智電銷機(jī)器人6 荊州云電銷機(jī)器人供應(yīng)商 外呼不封號(hào)系統(tǒng)

一、前言

本文使用的是 kaggle 貓狗大戰(zhàn)的數(shù)據(jù)集:https://www.kaggle.com/c/dogs-vs-cats/data

訓(xùn)練集中有 25000 張圖像,測(cè)試集中有 12500 張圖像。作為簡(jiǎn)單示例,我們用不了那么多圖像,隨便抽取一小部分貓狗圖像到一個(gè)文件夾里即可。

通過(guò)使用更大、更復(fù)雜的模型,可以獲得更高的準(zhǔn)確率,預(yù)訓(xùn)練模型是一個(gè)很好的選擇,我們可以直接使用預(yù)訓(xùn)練模型來(lái)完成分類任務(wù),因?yàn)轭A(yù)訓(xùn)練模型通常已經(jīng)在大型的數(shù)據(jù)集上進(jìn)行過(guò)訓(xùn)練,通常用于完成大型的圖像分類任務(wù)。

tf.keras.applications中有一些預(yù)定義好的經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(Application應(yīng)用),如下所示:

我們可以直接調(diào)用這些經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(甚至載入預(yù)訓(xùn)練的參數(shù)),而無(wú)需手動(dòng)來(lái)構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)。

例如,本文將要用到的模型是由谷歌開發(fā)的 MobileNetV2 網(wǎng)絡(luò)結(jié)構(gòu),該模型已經(jīng)在 ImageNet 數(shù)據(jù)集上進(jìn)行過(guò)預(yù)訓(xùn)練,共含有 1.4M 張圖像,而且學(xué)習(xí)了常見(jiàn)的 1000 種物體的基本特征,因此,該模型具有強(qiáng)大的特征提取能力。

model = tf.keras.applications.MobileNetV2()

當(dāng)執(zhí)行以上代碼時(shí),TensorFlow會(huì)自動(dòng)從網(wǎng)絡(luò)上下載 MobileNetV2 網(wǎng)絡(luò)結(jié)構(gòu),運(yùn)行代碼后需要等待一會(huì)會(huì)兒~~。MobileNetV2模型的速度很快,而且耗費(fèi)資源也不是很多。

二、k-means聚類

k-means聚類算法以 k 為參數(shù),把 n 個(gè)對(duì)象分成 k 個(gè)簇,使簇內(nèi)具有較高的相似度,而簇間的相似度較低。其處理過(guò)程如下:

  • 隨機(jī)選擇 k 個(gè)點(diǎn)作為初始的聚類中心
  • 對(duì)于剩下的點(diǎn),根據(jù)其與聚類中心的距離,將其歸入最近的簇。
  • 對(duì)每個(gè)簇,計(jì)算所有點(diǎn)的均值作為新的聚類中心。
  • 重復(fù)步驟2、3直到聚類中心不再發(fā)生改變

k-means的算法原理比較非常簡(jiǎn)潔、易于理解,但是這里面有個(gè)問(wèn)題需要解決:

如何確定 k 值?

  • 在 k-means 算法實(shí)現(xiàn)過(guò)程中,首先面臨的問(wèn)題就是如何確定好 K 值。因?yàn)樵趯?shí)際應(yīng)用中,我們也不知道這些數(shù)據(jù)到底會(huì)有多少個(gè)類別,或者分為多少個(gè)類別會(huì)比較好,所以在選擇 K 值的時(shí)候會(huì)比較困難,只能根據(jù)經(jīng)驗(yàn)預(yù)設(shè)一個(gè)數(shù)值。
  • 比較常用的一個(gè)方法:肘部法。就是去循環(huán)嘗試 K 值,計(jì)算在不同的 K 值情況下,所有數(shù)據(jù)的損失,即用每一個(gè)數(shù)據(jù)點(diǎn)到中心點(diǎn)的距離之和計(jì)算平均距離??梢韵氲剑?dāng) K=1 的時(shí)候,這個(gè)距離和肯定是最大的;當(dāng) K=m 的時(shí)候,每個(gè)點(diǎn)也是自己的中心點(diǎn),這個(gè)時(shí)候全局的距離和是0,平均距離也是0,當(dāng)然我們不可能設(shè)置成K=m。
  • 而在逐漸加大 K 的過(guò)程中,會(huì)有一個(gè)點(diǎn),使這個(gè)平均距離發(fā)生急劇的變化,如果把這個(gè)距離與 K 的關(guān)系畫出來(lái),就可以看到一個(gè)拐點(diǎn),也就是我們說(shuō)的手肘。

要確定 K 值確實(shí)是一項(xiàng)比較費(fèi)時(shí)費(fèi)力的事情,但是也是 K-Means 聚類算法中必須要做好的工作。

三、圖像分類

現(xiàn)在進(jìn)入正題,實(shí)現(xiàn)我們的貓狗圖像分類。

導(dǎo)入需要的依賴庫(kù)

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

獲取 animals 文件夾下所有 jpg 貓狗圖像

# 獲得該文件夾下所有jpg圖片路徑
p = Path(r"C:\Users\Administrator\DeepLearning\animals")
files = list(p.glob("**/*.jpg"))

opencv讀取圖像,并將圖像大小 resize 為(224,224),以匹配模型輸入層的大小以進(jìn)行特征提取。圖像數(shù)組轉(zhuǎn)換為 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]
# 圖像數(shù)組轉(zhuǎn)換為float32類型并reshape  然后做歸一化
images = np.array(np.float32(images).reshape(len(images), -1) / 255)

加載預(yù)訓(xùn)練模型 MobileNetV2 來(lái)實(shí)現(xiàn)圖像分類

# 加載預(yù)先訓(xùn)練的模型MobileNetV2來(lái)實(shí)現(xiàn)圖像分類
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個(gè)類別
# K-Means聚類
kmodel = KMeans(n_clusters=k, n_jobs=-1, random_state=888)
kmodel.fit(pred_images)
kpredictions = kmodel.predict(pred_images)
print(kpredictions)   # 預(yù)測(cè)的類別
# 0:dog    1:cat

將分類后的圖像保存到不同文件夾下

for i in ["cat", "dog"]:
    os.mkdir(r"C:\Users\Administrator\DeepLearning\picture_" + str(i))

# 復(fù)制文件,保留元數(shù)據(jù) shutil.copy2('來(lái)源文件', '目標(biāo)地址')
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")

結(jié)果如下:

貓狗圖像分類

推薦閱讀:
https://keras-cn.readthedocs.io/en/latest/other/application/
https://www.freesion.com/article/6932673943/
https://mp.weixin.qq.com/s/64fgbm4QESz-irwY0uUYOA

到此這篇關(guān)于tensorflow+k-means聚類 簡(jiǎn)單實(shí)現(xiàn)貓狗圖像分類的文章就介紹到這了,更多相關(guān)tensorflow實(shí)現(xiàn)貓狗圖像分類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:景德鎮(zhèn) 欽州 臺(tái)灣 宿遷 三沙 濟(jì)南 喀什 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《tensorflow+k-means聚類簡(jiǎn)單實(shí)現(xiàn)貓狗圖像分類的方法》,本文關(guān)鍵詞  tensorflow+k-means,聚類,簡(jiǎn)單,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《tensorflow+k-means聚類簡(jiǎn)單實(shí)現(xiàn)貓狗圖像分類的方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于tensorflow+k-means聚類簡(jiǎn)單實(shí)現(xiàn)貓狗圖像分類的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章