成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

15.衛(wèi)星圖片分類

singerye / 1328人閱讀

摘要:我們這次用的數(shù)據(jù)集不再是中內(nèi)置的數(shù)據(jù)集,而是自定義的數(shù)據(jù)集,我們先看一下我們的數(shù)據(jù)所有的數(shù)據(jù)都存儲在這個文件夾中文件夾中有與這兩個子文件夾分別存放的是飛機與湖泊的衛(wèi)星圖像目錄導(dǎo)入庫導(dǎo)入庫導(dǎo)入庫數(shù)據(jù)處理數(shù)據(jù)處理數(shù)據(jù)處理獲取

我們這次用的數(shù)據(jù)集不再是tensorflow中內(nèi)置的數(shù)據(jù)集,而是自定義的數(shù)據(jù)集,我們先看一下我們的數(shù)據(jù)??

所有的數(shù)據(jù)都存儲在2_class這個文件夾中

文件夾中有airplane與lake這兩個子文件夾

分別存放的是飛機與湖泊的衛(wèi)星圖像

  • airplane

  • lake

目錄

1??導(dǎo)入庫

2??數(shù)據(jù)處理

2.1??獲取圖像

2.2??定義標(biāo)簽

2.3??制作標(biāo)簽集

3??加載圖像

4??創(chuàng)建數(shù)據(jù)集

4.1??創(chuàng)建圖片路徑數(shù)據(jù)集

4.2??創(chuàng)建圖片數(shù)據(jù)集

4.3??創(chuàng)建標(biāo)簽數(shù)據(jù)集

4.4??創(chuàng)建圖片+標(biāo)簽數(shù)據(jù)集(總數(shù)據(jù)集)

4.5??定義訓(xùn)練集與測試集

5??設(shè)置重復(fù),隨機與batch

6??創(chuàng)建模型

7??編譯模型

8??訓(xùn)練模型

9??保存模型

10??讀取模型

11??預(yù)測模型


1??導(dǎo)入庫

我們這里首次用到了glob這個庫,這個庫是python自帶的庫,用于處理路徑中的文件的

random也是Python自帶的庫,用于進(jìn)行一些隨機的操作


2??數(shù)據(jù)處理


2.1??獲取圖像

首先我們獲取所有的圖像

我們在2_class中有兩個子文件夾,現(xiàn)在我們都要,所以我們用*表示,后面的*.jpg表示我們要所有的jpg文件

glob.glob的返回值是一個列表,我們打印出來看一下

我們可以發(fā)現(xiàn)all_iamge_path的前面都是飛機,后面都是湖泊,所以我們在這里要進(jìn)行亂序以達(dá)到更好的訓(xùn)練效果,此處我們使用ramdom.shuffle()

2.2??定義標(biāo)簽

我們定義飛機的標(biāo)簽為0,湖泊的標(biāo)簽為1,我們先創(chuàng)建一個字典明確對應(yīng)關(guān)系

為了最終預(yù)測方便我們再定義反過來(索引對標(biāo)簽)的字典

2.3??制作標(biāo)簽集

定義之后我們要為所有的圖像添加標(biāo)簽,我們發(fā)現(xiàn)在路徑中,中間的子文件夾名稱就是該圖片對應(yīng)的標(biāo)簽,所以我們現(xiàn)在把這個名稱取出來

這里我們要用到str的內(nèi)置方法split,這個方法我在這個里面有介紹?python str基本用法_potato123232的博客-CSDN博客

  • 不同系統(tǒng)的路徑分隔符可能有區(qū)別,我們當(dāng)前使用的是windows,用的是雙斜杠(//)

我們打印出來看一下

3??加載圖像

tensorflow有內(nèi)置讀取文件的方法 tf.io.read_file()參數(shù)為文件路徑

我們現(xiàn)在讀取一個文件試一下這個方法

當(dāng)前的類型是一堆二進(jìn)制的數(shù)據(jù),我們要將其解碼,使其變?yōu)閠ensor,我們使用tf.image.decode_jpeg()進(jìn)行解碼,第一個參數(shù)為要解碼的對象,第二個參數(shù)為通道格式,我們當(dāng)前為彩色圖像,所以為3

這個就是我們要用到的類型,我們現(xiàn)在先看一下它的shape

前面兩個是寬高,第三個是通道(rgb三通道)

再看一下它的dtype

發(fā)現(xiàn)是uint8,我們訓(xùn)練中最好轉(zhuǎn)換為float,我們使用tensorflow的cast方法進(jìn)行類型轉(zhuǎn)換

之后我們對圖像進(jìn)行歸一化,由于當(dāng)前圖像的取值范圍為(0-255)所以我們除255(一般的圖像取值范圍都是0到255)

我們?yōu)榱私窈蠓奖銓⑸厦娴倪^程封裝成一個函數(shù)

我們正好梳理一下流程

首先我們需要圖片的路徑,然后讀取該路徑的文件

之后解碼該文件

再之后我們需要加入一步操作,我們剛剛進(jìn)行的是單張的流程,所以不涉及到圖片大小不一的情況,我們在訓(xùn)練的過程中,將圖片的大小統(tǒng)一會達(dá)到更好的效果,所以我們此處使用tf.image.resize改變圖像的大小

此處我們將其都改為(256,256)的圖像大小,之后將其類型轉(zhuǎn)變?yōu)閒loat32,再之后歸一化


4??創(chuàng)建數(shù)據(jù)集


4.1??創(chuàng)建圖片路徑數(shù)據(jù)集

首先我們創(chuàng)建所有圖片路徑的數(shù)據(jù)集

我們看一下當(dāng)前的路徑集

我們從types可以看出來,現(xiàn)在里面全都是字符串

4.2??創(chuàng)建圖片數(shù)據(jù)集

然后我們將路徑集中的每個元素都執(zhí)行一遍load_img(),此處我們使用的是tensorflow中的map方法,這個方法與python內(nèi)置的map方法使用方式相似,我在這里有介紹?python內(nèi)建方法_potato123232的博客-CSDN博客

現(xiàn)在我們再看一下現(xiàn)在的圖片數(shù)據(jù)集

4.3??創(chuàng)建標(biāo)簽數(shù)據(jù)集

4.4??創(chuàng)建圖片+標(biāo)簽數(shù)據(jù)集(總數(shù)據(jù)集)

在這一步中我們要把剛剛的圖片數(shù)據(jù)集和標(biāo)簽數(shù)據(jù)集合為一個數(shù)據(jù)集,我們使用tf.data.Dataset.zip()將兩個數(shù)據(jù)集合并

  • zip的參數(shù)是元組類型,如果不加小括號會報錯

4.5??定義訓(xùn)練集與測試集

我們?nèi)∩厦鎰?chuàng)建的數(shù)據(jù)集一部分作為訓(xùn)練集,另一部分作為測試集,我們先看一下一共有多少張圖片

我們可以使用20%的數(shù)據(jù)進(jìn)行驗證,其余圖片進(jìn)行訓(xùn)練,我們現(xiàn)在定義這兩個數(shù)值,這里由于乘0.2可能會出現(xiàn)小數(shù),我們的數(shù)量是不能有小數(shù)部分的,所以我們?nèi)≌尾糠?/p>

之后我們跳過總數(shù)據(jù)集的前test_count個數(shù)作為訓(xùn)練集,然后取前test_count作為測試集

  • skip() 跳過,參數(shù)為要跳過的個數(shù)

5??設(shè)置重復(fù),隨機與batch

首先我們定義BATCHSIZE為16,這個和cpu性能相關(guān),如果cpu性能好可適量增大,BATCHSIZE越大訓(xùn)練速度越快,BATCHSIZE對訓(xùn)練精度無影響

此處由于加入了重復(fù),所以隨機是有必要的(雖然我們上面對數(shù)據(jù)集加入了初始隨機),因為如果不加入隨機我們每次傳入的圖片順序還是一樣的,對最終訓(xùn)練的結(jié)果有不好的影響

  • shuffle的參數(shù)名稱為buffle_size是在多少個數(shù)據(jù)內(nèi)進(jìn)行隨機的意思,batch的參數(shù)名稱為batch_size,這兩個參數(shù)沒有關(guān)聯(lián)

我們可以發(fā)現(xiàn)與上面的train_ds相比,train_ds加入了一個維度None,這個是因為我們加入了batch,我們每加入一次batch就會多出一個維度,所以我們要注意添加batch的次數(shù)

我們給測試集也加上batch,測試集不用加shuffle因為無論是否亂序都要測試,而且測試的順序不影響最終的acc或loss,不用加shuffle就不用加repeat

6??創(chuàng)建模型

我們使用的網(wǎng)絡(luò)為卷積神經(jīng)網(wǎng)絡(luò),我們的網(wǎng)絡(luò)是這樣的

我們看一下這個模型的summary

  • 這個模型很像VGG模型,后面會提到

這里要注意下面幾點

  • 圖像大小

我們卷積到最后圖像大小為(6,6),這個時候依然可以使用(3,3)的卷積核進(jìn)行卷積,但如果輸出的圖像大小小于卷積核大小,這個時候就不能繼續(xù)卷積了,如果繼續(xù)卷積會報錯

  • 最后一層的神經(jīng)元個數(shù)

二分類我們最終輸出一個結(jié)果就可以了,我們可以設(shè)置一個閾值(一般為0.5),大于或等于閾值我們判定為飛機,小于閾值我們判定為湖泊

7??編譯模型

  • 優(yōu)化器

我們這里沒有直接使用"adam"這個字符串,而是使用了tf.keras.optimizers.Adam(),我們使用后面的這種方法可以對優(yōu)化器添加參數(shù),如果使用前面的方式使用的就是默認(rèn)參數(shù),這里我們修改了學(xué)習(xí)速率,我們把學(xué)習(xí)速率搞小一點

  • 損失

我們的所有l(wèi)oss存放在tf.keras.losses中,上面我們用的是大寫的BinaryCrossentropy,這個和咱們之前直接輸入字符串的效果相同,還有一種小寫的,這個需要添加參數(shù),我們現(xiàn)在暫時不用這個

如果我們進(jìn)行多分類任務(wù)的話損失就要改成CategoricalCrossentropy

CategoricalCrossentropy有個參數(shù)是from_logits,如果我們在構(gòu)建神經(jīng)網(wǎng)絡(luò)時最后一層沒有激活函數(shù),則from_logits就置為True,如果我們有激活函數(shù)就置為False

8??訓(xùn)練模型

首先我們定義訓(xùn)練集與測試集的每一個epoch所進(jìn)行的批次數(shù)

之后我們使用fit()對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練

訓(xùn)練之后我們將結(jié)果繪制成曲線看一下情況

  • acc

  • loss

發(fā)現(xiàn)準(zhǔn)確率已經(jīng)超過了0.95,這個在實際生活中的某些場合中已經(jīng)達(dá)到了可以使用的程度


9??保存模型

像這種CNN的模型訓(xùn)練的時間比較漫長,所以我們此處先簡單介紹一下如何保存模型,訓(xùn)練后我們對訓(xùn)練好的模型進(jìn)行保存,之后我們再次要使用到這個模型的時候就不需要再訓(xùn)練了

運行結(jié)束后會出現(xiàn)這樣一個文件夾

里面有這些文件,這個就不在這里多介紹了,后面會具體的提到如何保存模型

10??讀取模型

這個時候我們就再另一個新開的py文件中讀取模型了

11??預(yù)測模型

我們先從百度上找一張飛機的圖片與湖泊的衛(wèi)星圖片,當(dāng)然我們也可以直接使用數(shù)據(jù)集中的圖片,但是如果找原來的圖片意義不大,因為從訓(xùn)練數(shù)據(jù)中找的圖不能驗證模型的成果

我們訓(xùn)練的數(shù)據(jù)怎么處理的原數(shù)據(jù),在預(yù)測的時候也要對被預(yù)測圖片進(jìn)行一遍相同的處理,所以我們要再次使用一次上面定義的load_img()

首先定義load_img()

然后使用load_img()

我們看一下它的shape

發(fā)現(xiàn)shape是三維的,而我們訓(xùn)練時的圖像是四維的,我們需要再提升一個維度

現(xiàn)在我們就可以進(jìn)行預(yù)測了

我們發(fā)現(xiàn)得到了一個概率值,這個值越靠近1就是越像湖泊,越靠近0就越像飛機,那我們現(xiàn)在就可以直接進(jìn)行判斷了

為了方便我們現(xiàn)在把預(yù)測的過程也封裝成一個函數(shù)

現(xiàn)在我們用這個函數(shù)預(yù)測一樣剛剛湖泊的圖片

如果想把圖片展示出來,然后加上預(yù)測的文字,那么我們可以使用opencv,方法在這里可以找到?1.圖像基本操作_potato123232的博客-CSDN博客_圖像基本操作

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/122574.html

相關(guān)文章

  • 無線網(wǎng)絡(luò)技術(shù)學(xué)習(xí)總結(jié)

    摘要:通過通信線路連入通信子網(wǎng)終端是用戶訪問網(wǎng)絡(luò)的界面網(wǎng)絡(luò)操作系統(tǒng)是相對于主機操作系統(tǒng)而言的。接收方使用同一擴頻碼進(jìn)行擴解。 目錄 一、計算機網(wǎng)絡(luò) 1.計算機網(wǎng)絡(luò)技術(shù)概述 2.計算機網(wǎng)絡(luò)分類 3.無線網(wǎng)絡(luò)分類 二、無線通信和網(wǎng)絡(luò)仿真技術(shù)基礎(chǔ) 1.基本概念 2.調(diào)制 (1)、概述 (2)、常用方式 ...

    animabear 評論0 收藏0
  • 從RocketMQ我們學(xué)到了什么之NameServer

    摘要:故事中的下屬們,就是消息生產(chǎn)者角色,屋子右面墻根那塊地就是消息持久化,呂秀才就是消息調(diào)度中心,而你就是消息消費者角色。下屬們匯報的消息,應(yīng)該疊放在哪里,這個消息又應(yīng)該在哪里才能找到,全靠呂秀才的驚人記憶力,才可以讓消息準(zhǔn)確的被投放以及消費。 微信公眾號:IT一刻鐘大型現(xiàn)實非嚴(yán)肅主義現(xiàn)場一刻鐘與你分享優(yōu)質(zhì)技術(shù)架構(gòu)與見聞,做一個有劇情的程序員關(guān)注可了解更多精彩內(nèi)容。問題或建議,請公眾號留言...

    wangbjun 評論0 收藏0
  • 從RocketMQ我們學(xué)到了什么之NameServer

    摘要:故事中的下屬們,就是消息生產(chǎn)者角色,屋子右面墻根那塊地就是消息持久化,呂秀才就是消息調(diào)度中心,而你就是消息消費者角色。下屬們匯報的消息,應(yīng)該疊放在哪里,這個消息又應(yīng)該在哪里才能找到,全靠呂秀才的驚人記憶力,才可以讓消息準(zhǔn)確的被投放以及消費。 微信公眾號:IT一刻鐘大型現(xiàn)實非嚴(yán)肅主義現(xiàn)場一刻鐘與你分享優(yōu)質(zhì)技術(shù)架構(gòu)與見聞,做一個有劇情的程序員關(guān)注可了解更多精彩內(nèi)容。問題或建議,請公眾號留言...

    Arno 評論0 收藏0
  • 【收藏】6000字人工智能科普,高中生都能讀懂 —— Jinkey原創(chuàng)

    摘要:人工智能概述簡史應(yīng)用領(lǐng)域安防實時從視頻中檢測出行人和車輛。通過多張醫(yī)療影像重建出人體內(nèi)器官的三維模型,幫助醫(yī)生設(shè)計手術(shù),確保手術(shù)為我們每個人提供康建議和疾病風(fēng)險預(yù)警,從而讓我們生活得更加健康。 showImg(https://segmentfault.com/img/remote/1460000015971504); 0 引言 本文是《人工智能基礎(chǔ)(高中版)》的讀書筆記,這本書的配圖非...

    張巨偉 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<