摘要:我們這次用的數據集不再是中內置的數據集,而是自定義的數據集,我們先看一下我們的數據所有的數據都存儲在這個文件夾中文件夾中有與這兩個子文件夾分別存放的是飛機與湖泊的衛星圖像目錄導入庫導入庫導入庫數據處理數據處理數據處理獲取
我們這次用的數據集不再是tensorflow中內置的數據集,而是自定義的數據集,我們先看一下我們的數據??
所有的數據都存儲在2_class這個文件夾中
文件夾中有airplane與lake這兩個子文件夾
分別存放的是飛機與湖泊的衛星圖像
目錄
我們這里首次用到了glob這個庫,這個庫是python自帶的庫,用于處理路徑中的文件的
random也是Python自帶的庫,用于進行一些隨機的操作
首先我們獲取所有的圖像
我們在2_class中有兩個子文件夾,現在我們都要,所以我們用*表示,后面的*.jpg表示我們要所有的jpg文件
glob.glob的返回值是一個列表,我們打印出來看一下
我們可以發現all_iamge_path的前面都是飛機,后面都是湖泊,所以我們在這里要進行亂序以達到更好的訓練效果,此處我們使用ramdom.shuffle()
我們定義飛機的標簽為0,湖泊的標簽為1,我們先創建一個字典明確對應關系
為了最終預測方便我們再定義反過來(索引對標簽)的字典
定義之后我們要為所有的圖像添加標簽,我們發現在路徑中,中間的子文件夾名稱就是該圖片對應的標簽,所以我們現在把這個名稱取出來
這里我們要用到str的內置方法split,這個方法我在這個里面有介紹?python str基本用法_potato123232的博客-CSDN博客
我們打印出來看一下
tensorflow有內置讀取文件的方法 tf.io.read_file()參數為文件路徑
我們現在讀取一個文件試一下這個方法
當前的類型是一堆二進制的數據,我們要將其解碼,使其變為tensor,我們使用tf.image.decode_jpeg()進行解碼,第一個參數為要解碼的對象,第二個參數為通道格式,我們當前為彩色圖像,所以為3
這個就是我們要用到的類型,我們現在先看一下它的shape
前面兩個是寬高,第三個是通道(rgb三通道)
再看一下它的dtype
發現是uint8,我們訓練中最好轉換為float,我們使用tensorflow的cast方法進行類型轉換
之后我們對圖像進行歸一化,由于當前圖像的取值范圍為(0-255)所以我們除255(一般的圖像取值范圍都是0到255)
我們為了今后方便將上面的過程封裝成一個函數
我們正好梳理一下流程
首先我們需要圖片的路徑,然后讀取該路徑的文件
之后解碼該文件
再之后我們需要加入一步操作,我們剛剛進行的是單張的流程,所以不涉及到圖片大小不一的情況,我們在訓練的過程中,將圖片的大小統一會達到更好的效果,所以我們此處使用tf.image.resize改變圖像的大小
此處我們將其都改為(256,256)的圖像大小,之后將其類型轉變為float32,再之后歸一化
首先我們創建所有圖片路徑的數據集
我們看一下當前的路徑集
我們從types可以看出來,現在里面全都是字符串
然后我們將路徑集中的每個元素都執行一遍load_img(),此處我們使用的是tensorflow中的map方法,這個方法與python內置的map方法使用方式相似,我在這里有介紹?python內建方法_potato123232的博客-CSDN博客
現在我們再看一下現在的圖片數據集
在這一步中我們要把剛剛的圖片數據集和標簽數據集合為一個數據集,我們使用tf.data.Dataset.zip()將兩個數據集合并
我們取上面創建的數據集一部分作為訓練集,另一部分作為測試集,我們先看一下一共有多少張圖片
我們可以使用20%的數據進行驗證,其余圖片進行訓練,我們現在定義這兩個數值,這里由于乘0.2可能會出現小數,我們的數量是不能有小數部分的,所以我們取整形部分
之后我們跳過總數據集的前test_count個數作為訓練集,然后取前test_count作為測試集
首先我們定義BATCHSIZE為16,這個和cpu性能相關,如果cpu性能好可適量增大,BATCHSIZE越大訓練速度越快,BATCHSIZE對訓練精度無影響
此處由于加入了重復,所以隨機是有必要的(雖然我們上面對數據集加入了初始隨機),因為如果不加入隨機我們每次傳入的圖片順序還是一樣的,對最終訓練的結果有不好的影響
我們可以發現與上面的train_ds相比,train_ds加入了一個維度None,這個是因為我們加入了batch,我們每加入一次batch就會多出一個維度,所以我們要注意添加batch的次數
我們給測試集也加上batch,測試集不用加shuffle因為無論是否亂序都要測試,而且測試的順序不影響最終的acc或loss,不用加shuffle就不用加repeat
我們使用的網絡為卷積神經網絡,我們的網絡是這樣的
我們看一下這個模型的summary
這里要注意下面幾點
我們卷積到最后圖像大小為(6,6),這個時候依然可以使用(3,3)的卷積核進行卷積,但如果輸出的圖像大小小于卷積核大小,這個時候就不能繼續卷積了,如果繼續卷積會報錯
二分類我們最終輸出一個結果就可以了,我們可以設置一個閾值(一般為0.5),大于或等于閾值我們判定為飛機,小于閾值我們判定為湖泊
我們這里沒有直接使用"adam"這個字符串,而是使用了tf.keras.optimizers.Adam(),我們使用后面的這種方法可以對優化器添加參數,如果使用前面的方式使用的就是默認參數,這里我們修改了學習速率,我們把學習速率搞小一點
我們的所有loss存放在tf.keras.losses中,上面我們用的是大寫的BinaryCrossentropy,這個和咱們之前直接輸入字符串的效果相同,還有一種小寫的,這個需要添加參數,我們現在暫時不用這個
如果我們進行多分類任務的話損失就要改成CategoricalCrossentropy
CategoricalCrossentropy有個參數是from_logits,如果我們在構建神經網絡時最后一層沒有激活函數,則from_logits就置為True,如果我們有激活函數就置為False
首先我們定義訓練集與測試集的每一個epoch所進行的批次數
之后我們使用fit()對神經網絡進行訓練
訓練之后我們將結果繪制成曲線看一下情況
發現準確率已經超過了0.95,這個在實際生活中的某些場合中已經達到了可以使用的程度
像這種CNN的模型訓練的時間比較漫長,所以我們此處先簡單介紹一下如何保存模型,訓練后我們對訓練好的模型進行保存,之后我們再次要使用到這個模型的時候就不需要再訓練了
運行結束后會出現這樣一個文件夾
里面有這些文件,這個就不在這里多介紹了,后面會具體的提到如何保存模型
這個時候我們就再另一個新開的py文件中讀取模型了
我們先從百度上找一張飛機的圖片與湖泊的衛星圖片,當然我們也可以直接使用數據集中的圖片,但是如果找原來的圖片意義不大,因為從訓練數據中找的圖不能驗證模型的成果
我們訓練的數據怎么處理的原數據,在預測的時候也要對被預測圖片進行一遍相同的處理,所以我們要再次使用一次上面定義的load_img()
首先定義load_img()
然后使用load_img()
我們看一下它的shape
發現shape是三維的,而我們訓練時的圖像是四維的,我們需要再提升一個維度
現在我們就可以進行預測了
我們發現得到了一個概率值,這個值越靠近1就是越像湖泊,越靠近0就越像飛機,那我們現在就可以直接進行判斷了
為了方便我們現在把預測的過程也封裝成一個函數
現在我們用這個函數預測一樣剛剛湖泊的圖片
如果想把圖片展示出來,然后加上預測的文字,那么我們可以使用opencv,方法在這里可以找到?1.圖像基本操作_potato123232的博客-CSDN博客_圖像基本操作
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122574.html
摘要:通過通信線路連入通信子網終端是用戶訪問網絡的界面網絡操作系統是相對于主機操作系統而言的。接收方使用同一擴頻碼進行擴解。 目錄 一、計算機網絡 1.計算機網絡技術概述 2.計算機網絡分類 3.無線網絡分類 二、無線通信和網絡仿真技術基礎 1.基本概念 2.調制 (1)、概述 (2)、常用方式 ...
摘要:故事中的下屬們,就是消息生產者角色,屋子右面墻根那塊地就是消息持久化,呂秀才就是消息調度中心,而你就是消息消費者角色。下屬們匯報的消息,應該疊放在哪里,這個消息又應該在哪里才能找到,全靠呂秀才的驚人記憶力,才可以讓消息準確的被投放以及消費。 微信公眾號:IT一刻鐘大型現實非嚴肅主義現場一刻鐘與你分享優質技術架構與見聞,做一個有劇情的程序員關注可了解更多精彩內容。問題或建議,請公眾號留言...
摘要:故事中的下屬們,就是消息生產者角色,屋子右面墻根那塊地就是消息持久化,呂秀才就是消息調度中心,而你就是消息消費者角色。下屬們匯報的消息,應該疊放在哪里,這個消息又應該在哪里才能找到,全靠呂秀才的驚人記憶力,才可以讓消息準確的被投放以及消費。 微信公眾號:IT一刻鐘大型現實非嚴肅主義現場一刻鐘與你分享優質技術架構與見聞,做一個有劇情的程序員關注可了解更多精彩內容。問題或建議,請公眾號留言...
摘要:人工智能概述簡史應用領域安防實時從視頻中檢測出行人和車輛。通過多張醫療影像重建出人體內器官的三維模型,幫助醫生設計手術,確保手術為我們每個人提供康建議和疾病風險預警,從而讓我們生活得更加健康。 showImg(https://segmentfault.com/img/remote/1460000015971504); 0 引言 本文是《人工智能基礎(高中版)》的讀書筆記,這本書的配圖非...
閱讀 1653·2021-11-23 09:51
閱讀 2677·2021-11-22 09:34
閱讀 1316·2021-10-14 09:43
閱讀 3661·2021-09-08 09:36
閱讀 3206·2019-08-30 12:57
閱讀 2025·2019-08-30 12:44
閱讀 2516·2019-08-29 17:15
閱讀 3014·2019-08-29 16:08