最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年04月28日 14:19:05   作者:葉庭云  
這篇文章主要介紹了tensorflow+k-means聚類簡單實現(xiàn)貓狗圖像分類,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、前言

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

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

通過使用更大、更復雜的模型,可以獲得更高的準確率,預訓練模型是一個很好的選擇,我們可以直接使用預訓練模型來完成分類任務,因為預訓練模型通常已經(jīng)在大型的數(shù)據(jù)集上進行過訓練,通常用于完成大型的圖像分類任務。

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

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

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

model = tf.keras.applications.MobileNetV2()

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

二、k-means聚類

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

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

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

如何確定 k 值?

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

要確定 K 值確實是一項比較費時費力的事情,但是也是 K-Means 聚類算法中必須要做好的工作。

三、圖像分類

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

導入需要的依賴庫

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),以匹配模型輸入層的大小以進行特征提取。圖像數(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)

加載預訓練模型 MobileNetV2 來實現(xiàn)圖像分類

# 加載預先訓練的模型MobileNetV2來實現(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個類別
# 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))

# 復制文件,保留元數(shù)據(jù) 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")

結(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聚類 簡單實現(xiàn)貓狗圖像分類的文章就介紹到這了,更多相關(guān)tensorflow實現(xiàn)貓狗圖像分類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python解決Missing 1 required positional argument報錯問題

    python解決Missing 1 required positional ar

    這篇文章主要介紹了python解決Missing 1 required positional argument報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Python快速生成定制化的Word(docx)文檔

    Python快速生成定制化的Word(docx)文檔

    這篇文章主要為大家介紹了如何使用Python快速生成定制化的Word文檔實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • python中join與os.path.join()函數(shù)實例詳解

    python中join與os.path.join()函數(shù)實例詳解

    os.path.join()函數(shù)用于路徑拼接文件路徑,下面這篇文章主要給大家介紹了關(guān)于python中join與os.path.join()函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • Python解析并讀取PDF文件內(nèi)容的方法

    Python解析并讀取PDF文件內(nèi)容的方法

    這篇文章主要介紹了Python解析并讀取PDF文件內(nèi)容的方法,結(jié)合實例形式分別描述了Python2.7在win32與win64環(huán)境下實現(xiàn)讀取pdf的相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 對django后臺admin下拉框進行過濾的實例

    對django后臺admin下拉框進行過濾的實例

    今天小編就為大家分享一篇對django后臺admin下拉框進行過濾的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python切割圖片的示例

    python切割圖片的示例

    這篇文章主要介紹了利用python切割圖片的示例,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-11-11
  • 使用Python實現(xiàn)監(jiān)控進程是否有病毒

    使用Python實現(xiàn)監(jiān)控進程是否有病毒

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)監(jiān)控進程是否有病毒,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • 在Django下測試與調(diào)試REST API的方法詳解

    在Django下測試與調(diào)試REST API的方法詳解

    今天小編就為大家分享一篇在Django下測試與調(diào)試REST API的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 利用PyCharm操作Github(倉庫新建、更新,代碼回滾)

    利用PyCharm操作Github(倉庫新建、更新,代碼回滾)

    這篇文章主要介紹了利用PyCharm操作Github(倉庫新建、更新,代碼回滾),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Python切片列表字符串如何實現(xiàn)切換

    Python切片列表字符串如何實現(xiàn)切換

    這篇文章主要介紹了Python切片列表字符串如何實現(xiàn)切換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論

镶黄旗| 尚志市| 平阴县| 土默特左旗| 舟曲县| 中山市| 江北区| 双柏县| 武功县| 昂仁县| 城固县| 宣威市| 丹棱县| 内乡县| 邵阳县| 铁岭县| 织金县| 蒙城县| 富裕县| 铜川市| 兰州市| 赤壁市| 海林市| 山丹县| 龙游县| 正镶白旗| 呼图壁县| 大姚县| 镇宁| 新建县| 张家川| 大足县| 乾安县| 荆州市| 黔西县| 伊吾县| 丰镇市| 鄂伦春自治旗| 博乐市| 南投市| 盐山县|